以下代码将输出“true”,这意味着 Array() 为 true。在 Python 中,list() 为 False,这仅仅是因为语言设计者的偏好吗?
document.write("<p>Array() is " + (Array() ? "true" : "false") + "</p>");
以下代码将输出“true”,这意味着 Array() 为 true。在 Python 中,list() 为 False,这仅仅是因为语言设计者的偏好吗?
document.write("<p>Array() is " + (Array() ? "true" : "false") + "</p>");
这是因为 javascript 将值强制Array()
转换为布尔值。这就是所谓的“真实性”,在 javascript 中,真实值包括任何有效对象。 Array()
生成一个有效对象,因此在布尔表达式中计算为真值。
Null
, undefined
, NaN
,0
和空字符串""
评估为假。
为什么?因为ECMAScript 规范是这么说的。
Array() 是真实的。换句话说,它有一个值,并且该值不是 false、null 或 undefined。有很多关于什么是真实的列表,而不是 web 上的 javascript。举个例子,创建新数组的更“标准”/“公认”的方式是使用数组文字 - []。如果你把它放在你的控制台中,你也会得到“真”。
console.log(!!([]));
Array() 在这里返回数组(虽然是空的),试试(Array().length ? "true" : "false")
这里 Array()是一个构造函数,它将指向一个非空的已定义对象,即使
在您的示例中它是空的,但它是一个有效的对象,当它被转换为
布尔值时,它将被评估为真(只有空和未定义对象被评估为
假)。