var a={ ‘f2’:{‘name’:‘11’}, ‘f2’:{‘name’:‘12’} }
最后a.f2.name的值是12,如何检测对象中是否存在属性重复呢?
赋值的时候用 in 操作符检测一下? 后面的赋值会覆盖前面的
@alsotang in只能看到一个属性,不能检测属性是否出现重复
@chapgaga alsotang 是建议先测一下,再赋值:
> var a = { name:'jack' }
undefined
> 'name' in a
true
> 'name2' in a
false
>
@leapon 我的目的是为了检测对象中是否出现重复属性,是对现有代码进行检测
你没法定义一个具有两个相同key的object吧
var a={
'f2':{'name':'11'},
'f2':{'name':'12'}
}
console.log(a); // { f2: { name: '12' } }
如果你是拿到这样一个不合法的json,在parse的时候也会报错的。那么问题来了,怎么去定义一个有2个相同属性的object?
Object.hasOwnProperty
这个不能玩吗?
@ruanyl 定义有相同属性object,语法是不会报错的,错在语义上,关键如何检测这种异常呢?
@saionjisekai 只能判断是否含有某个属性,不能检测是否包含某个属性两次
var a={
'f2’:{’name’:’11’},
'f2’:{’name’:’12’}
}
这个执行完,a变量里面只有一个f2属性了吧,第一个f2属性被覆盖掉了。所以根本不存在包含某个属性两次,也就无法在赋值后进行检测了吧。 最多可以在赋值前进行检测,比如用 in
一个属性怎么会有两个呢?写个demo出来分享一下怎么让一个对象拥有两个重复属性?
引入严格模式:
// test.js
'use strict';
var obj = {
a: '1',
a: '2'
};
console.log(obj);
执行node test.js
,报错:
SyntaxError: Duplicate data property in object literal not allowed in strict mode
@kakanjau 最后内存中只有一个f2啊,第一个被覆盖了,但是代码中有两个啊,要的是检测代码中出现重复属性啊,如何检测呢?
@bnuhero 呵呵,大赞,不过代码在浏览器中执行,如何检测属性重复呢?
一样的,加上'use strict';
后,如果对象的属性有重复,在浏览器开发者工具的Console中会提示出错信息。
@bnuhero use strict的作用域好像是全局的,在某个函数里使用了use strict,然后在里面放了有重复属性的对象,这个函数没有执行,但是代码执行时也报错了… 看来是全局有效的,呵呵