typeof关键字的行为

时间:2016-04-14 22:48:53

标签: javascript typeof

了解typeof关键字并需要澄清一下:

在排除故障时我将此代码输出到控制台:

console.log(typeof object.prop[someNum - 1]);

(在这种情况下为sumNum === 0

控制台打印出undefined这是我的预期,因为[someNum - 1]数组中的索引位置prop[]不存在(所以我认为)。 但是,当我做这样的事情时:

if(typeof object.prop[someNum - 1])
    //some code
 else
    //other code

它评估为true并运行//some code但是当我这样做时:

if(object.prop[someNum - 1])
    //some code
 else
    //other code

评估为false并运行//other code

我认为undefined被视为falsy value并且会在if statement中评估为false。为什么if(typeof object.prop[someNum - 1])语句评估为真?也有人可以指出我在哪里可以了解js中有关负索引数组的更多信息?它们是否在c#, c++, java, & php等多种语言中处理相同。我认为在评估负array索引号时,它会是underfined或抛出错误。

3 个答案:

答案 0 :(得分:5)

typeof总是返回一个字符串。

因此,您正在撰写if ("undefined")

由于非空字符串是真实的,因此将运行。

答案 1 :(得分:1)

正如SLaks所说,你正在评估字符串" undefined"是真实的,它是真的。

如果你想看一个对象是否有一个名为" someNum - 1"然后你可以使用 in 运算符:

if ((someNum - 1) in object.prop)
如果 object.prop 在其自身或其[[Prototype]]链上具有此类属性,则

将返回true,或者:

if (object.prop.hasOwnProperty(someNum - 1))

直接在对象上测试属性。

答案 2 :(得分:1)

正如其他答案所指出的,typeof返回一个字符串,它总是很简单,因为它永远不会返回一个空字符串。如果要测试类型是否为undefined,则需要比较字符串。

if (typeof object.prop[someNum - 1] == "undefined") {
    // some code
} else {
    // some code
}

您还可以测试该值是否为undefined

if (object.prop[someNum - 1] === undefined) {
    // some code
} else { 
    // some code
}

请确保您使用的是===而不是==,因此如果object[someNum - 1]null,则不会报告匹配。