了解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
或抛出错误。
答案 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
,则不会报告匹配。