为什么If语句为hashTable返回undefined?

时间:2017-10-26 06:07:11

标签: javascript algorithm data-structures hashtable

有人可以解释这个JavaScript怪癖吗?

一个例子:

function func(hashTable) {
  if (hashTable['foo'])
    return true;
}

var hash = {};
hash['foo'] = 0;
func(hash);

我得到undefined而不是true

5 个答案:

答案 0 :(得分:5)

那是因为你returned单个涵盖情况的函数(当hastTable['foo']为真时)。

hashTable['foo']0if(0)被解释为false,并且您没有返回值。

JavaScript ,而不仅仅是JavaScript,我们称之为falsy 。这些分别为:0nullundefinedfalse""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   } }