gpt4 book ai didi

javascript - Boolean() 函数的意外返回值

转载 作者:行者123 更新时间:2023-11-30 11:06:44 24 4
gpt4 key购买 nike

为了判断一个对象是数组还是对象列表,我想出了这个办法:

var foo = {}
Boolean(foo["length"]+1) // returns false because foo is an object


var foo = []
Boolean(foo["length"]+1) // returns true because foo is an array

然而,在看了这个之后,我意识到它不应该工作。[]["length"]+1 显然为真,因为它等于 1。{}["length"]+1 等于 "length1 " 这也是正确的,因为它不是未定义的。

那么为什么 Boolean({}["length"]+1) 返回 false 而 Boolean("length1") 返回 true?

最佳答案

So why is it that Boolean({}["length"]+1) returns false...

因为对象没有 length 属性,所以 {}["length"] 将返回 undefined 并尝试在 undefined 上执行 +1NaN,这是一个 falsy值(value)。

...yet Boolean("length1") returns true?

因为字符串 length1 是一个 truthy值(value)。

更好的测试是查看所讨论的项目是否具有只有其中一个具有的属性/方法。这叫做 "feature detection"并在整个 JavaScript 中广泛使用

let obj1 = {};
let obj2 = [];

console.log(obj1.length); // undefined: objects don't have length
console.log(obj1.hasOwnProperty); // native function (ie. truthy)
console.log(obj2.length); // 0: Arrays have length and this one's is 0
console.log(obj2.map); // the native function (ie. truthy)

关于javascript - Boolean() 函数的意外返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55304730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com