有人可以解释这个JavaScript怪癖吗?
一个例子:
function func(hashTable) {
if (hashTable['foo'])
return true;
}
var hash = {};
hash['foo'] = 0;
func(hash);
我得到undefined
而不是true
。
答案 0 :(得分:5)
那是因为你returned
单个涵盖情况的函数(当hastTable['foo']
为真时)。
hashTable['foo']
为0
,if(0)
被解释为false
,并且您没有返回值。
在 JavaScript ,而不仅仅是JavaScript,我们称之为falsy
值。这些分别为:0
,null
,undefined
,false
,""
,NaN
。
答案 1 :(得分:3)
hashTable['foo']
的值为0
,其值为布尔false
。因此永远不会执行if
块。
如果您想在hashTable
具有属性foo
(或任何其他属性)时执行if块,无论其值如何,您都可以这样做:
function func (hashTable) {
return hashTable.hasOwnProperty("foo");
}
var hash = {}
hash['foo'] = 0;
console.log(func (hash));
答案 2 :(得分:1)
可能更短&更好:
const func = table => "foo" in table;
哈希表应该像这样构建:
const hash = Object.create(null);
因为ES 6是一个更好的构造这样的东西:
const hash = new Map();
//to check
hash.has("foo")
答案 3 :(得分:0)
要检查对象是否包含特定属性,请使用in
或.hasOwnProperty()
。
in
会生成true
值。
.hasOwnProperty()
将返回true
。
function Student(name) {
this.name = name;
}
Student.prototype.occupation = 'student';
var john = new Student('John');
// in
console.log('name' in john); // true
console.log('occupation' in john); // true
console.log('age' in john); // false
// .hasOwnProperty()
console.log(john.hasOwnProperty('name')); // true
console.log(john.hasOwnProperty('occupation')); // false
console.log(john.hasOwnProperty('age')); // false

答案 4 :(得分:-1)
只有当hashTable ['foo']为真时才会发生返回;
hashTable ['foo']为false,因为您已分配0;
...这样 function func(hashTable){ if(hashTable ['foo']){ 返回true }其他{ 返回false } }