CNode

有哪些方法可以检测JS对象存在属性重复?

问答
Cchapgaga发布于12 年前最后回复12 年前15 回复12517 浏览0 收藏

var a={ 'f2':{'name':'11'}, 'f2':{'name':'12'} }

最后a.f2.name的值是12,如何检测对象中是否存在属性重复呢?

查看回复

回复 (15)

A
alsotang#1·12 年前

赋值的时候用 in 操作符检测一下? 后面的赋值会覆盖前面的

C
chapgaga#2·12 年前
引用 alsotang赋值的时候用 in 操作符检测一下? 后面的赋值会覆盖前面的

@alsotang in只能看到一个属性,不能检测属性是否出现重复

L
leapon#3·12 年前
引用 chapgaga@alsotang in只能看到一个属性,不能检测属性是否出现重复

@chapgaga alsotang 是建议先测一下,再赋值:

> var a = { name:'jack' }
undefined
> 'name' in a
true
> 'name2' in a
false
> 
C
chapgaga#4·12 年前
引用 leapon@chapgaga alsotang 是建议先测一下,再赋值:

@leapon 我的目的是为了检测对象中是否出现重复属性,是对现有代码进行检测

R
ruanyl#5·12 年前

你没法定义一个具有两个相同key的object吧

var a={
'f2':{'name':'11'},
'f2':{'name':'12'}
}
console.log(a); // { f2: { name: '12' } }

如果你是拿到这样一个不合法的json,在parse的时候也会报错的。那么问题来了,怎么去定义一个有2个相同属性的object?

S
saionjisekai#6·12 年前

Object.hasOwnProperty这个不能玩吗?

C
chapgaga#8·12 年前
引用 saionjisekaiObject.hasOwnProperty这个不能玩吗?

@saionjisekai 只能判断是否含有某个属性,不能检测是否包含某个属性两次

K
kakanjau#9·12 年前
var a={
  'f2’:{’name’:’11’},
  'f2’:{’name’:’12’}
}

这个执行完,a变量里面只有一个f2属性了吧,第一个f2属性被覆盖掉了。所以根本不存在包含某个属性两次,也就无法在赋值后进行检测了吧。 最多可以在赋值前进行检测,比如用 in

H
Hanggi#10·12 年前

一个属性怎么会有两个呢?写个demo出来分享一下怎么让一个对象拥有两个重复属性?

B
bnuhero#11·12 年前

引入严格模式:

// 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

C
chapgaga#12·12 年前
引用 kakanjauvar a={ 'f2’:{’name’:’11’}, 'f2’:{’name’:’12’} } 这个执行完,a变量里面只有一个f2属性了吧,第一个f2属性被覆盖掉了。所以根本不存在包含某个属...

@kakanjau 最后内存中只有一个f2啊,第一个被覆盖了,但是代码中有两个啊,要的是检测代码中出现重复属性啊,如何检测呢?

C
chapgaga#13·12 年前
引用 bnuhero引入严格模式: 执行node test.js,报错: SyntaxError: Duplicate data property in object literal not allowed in...

@bnuhero 呵呵,大赞,不过代码在浏览器中执行,如何检测属性重复呢?

B
bnuhero#14·12 年前
引用 chapgaga@bnuhero 呵呵,大赞,不过代码在浏览器中执行,如何检测属性重复呢?

@chapgaga

一样的,加上'use strict';后,如果对象的属性有重复,在浏览器开发者工具的Console中会提示出错信息。

C
chapgaga#15·12 年前
引用 bnuhero@chapgaga 一样的,加上'use strict';后,如果对象的属性有重复,在浏览器开发者工具的Console中会提示出错信息。

@bnuhero use strict的作用域好像是全局的,在某个函数里使用了use strict,然后在里面放了有重复属性的对象,这个函数没有执行,但是代码执行时也报错了... 看来是全局有效的,呵呵

参与回复
登录后即可参与回复。登录