Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript y中的'x'与'y[x]之间的差异`_Javascript_Node.js_Object_Dictionary_Hash - Fatal编程技术网

Javascript y中的'x'与'y[x]之间的差异`

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

使用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 = {    // 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']