Javascript y中的'x'与'y[x]之间的差异`
使用JavaScript时,在性能或行为方面是否存在差异Javascript y中的'x'与'y[x]之间的差异`,javascript,node.js,object,dictionary,hash,Javascript,Node.js,Object,Dictionary,Hash,使用JavaScript时,在性能或行为方面是否存在差异 let foo = { a: true, b: false, c: true } 'c' in foo and foo['c'] ? 总是想知道,不知道如何寻找答案。唯一明显的区别是,foo['c']如果'c'指向一个假值,则返回false;如果foo中的as'c'具有键'c',则返回true 我问这个问题的原因: 在许多情况下,我只想存储一个键(用于快速搜索),而不关心其值: let foo = { //
let foo = {
a: true,
b: false,
c: true
}
'c' in foo
and
foo['c']
?
总是想知道,不知道如何寻找答案。唯一明显的区别是,foo['c']
如果'c'指向一个假值,则返回false;如果foo中的as'c'具有键'c',则返回true
我问这个问题的原因:
在许多情况下,我只想存储一个键(用于快速搜索),而不关心其值:
let foo = { // the keys are important, values of no consequence
a: undefined,
b: undefined,
c: undefined
}
我想知道只存储键而不指定值是否是最佳做法
if(!('a' in foo)){
foo['a'] = undefined;
}
给散列指定任何值似乎很奇怪,当我不需要使用这些值时,我只需要存储一个键。您可以用
唯一明显的区别是,如果“c”指向falsy值,foo['c']将返回false,如果foo具有键“c”,则foo中的as'c'将返回true
检查foo中是否有名为“c”的密钥
及
返回它的值虽然这可能已经在注释中得到了充分的回答,但这不是它们的目的,因此这里有一个适当的建议:使用
与对象不同,它们支持所有字符串作为键,即使是“\uuuu proto\uuuu”
和“hasOwnProperty”
(如果您愿意使用它们的话)
此外,它们还支持其他类型的键。特别令人感兴趣的是使用非原语作为键,还有NaN
,这很特别,因为它本身并不相等
let lookup=new Set()
console.log('任意字符串:')
查找。添加(“原始文件”)
lookup.add('hasOwnProperty')
支票
checkHas('hasOwnProperty')
查找。添加(5)
lookup.add(NaN)
console.log('其他类型:')
支票(5)
checkHas(南)
常量myObject={}
lookup.add(myObject)
console.log('某个任意对象:')
checkHas({})
console.log('myObject:')
checkHas(myObject)
lookup.add(myObject)
函数checkHas(键){
console.log(key,lookup.has(key))
}
。作为控制台包装器{
最大高度:100%!重要;
}
最简单的方法是通过“明显的差异”创建一个测试,是的,这非常重要。当他们做不同的事情时,谁会在乎查找时间呢?使用正确含义的检查。好吧,撇开性能不谈,在foo
中检查'c'是否存在,是否未定义
,而foo['c']
如果foo['c']
被初始化为未定义
,则foo['c']
无法传达存在。如果您想要一个集合,使用设置
类型。对象中的查找时间是O(n)的O(1)数组,对吗?
'c' in foo
foo['c']