我是JS的初学者。我正在编写一个接收输入数组的方法,需要检查它是否为空。我的第一种方法是在方法内的if语句中使用array === []
作为条件,但它没有用。它在我写条件array.length === 0
时有效。我以为他们有同样的意思。有人能解释为什么前者不起作用吗?
提前谢谢。
答案 0 :(得分:8)
比较
if (array === [])
比较两个对象的身份。一个对象从不等于(相同)另一个不同的对象,至少在"相等"在JavaScript中定义。 JavaScript中的对象比较总是只是一个测试,以查看某个表达式是否引用某个特定的已知对象。比较不会在内部看到"比较的对象。
一个可能非显而易见的细节是,表达式[]
不是对某些全局概念的引用,而是#34;空数组&#34 ;;这是创建全新空数组的请求。因此,比较
if ([] === [])
将为false,因为在===
运算符的两侧都会创建一个新的不同数组。
答案 1 :(得分:3)
因为array === []
正在比较两个对象是否相同。在JS中,当两者完全相同时,两个对象是相同的。检查两个对象是否完全相同的唯一方法是它们是否在内存中占用相同的空间。
我们该怎么做?我们检查两个对象是否指向相同的内存地址。在其他编程语言中,他们将此内存地址称为指针。
因为[]
正在动态创建一个对象,所以它是一个新对象,因此比较返回false。
另一方面,array.length === 0
正在与原始值(数字)进行比较,而在JS中,如果两个原始值具有相同的内容,则它们相等,因此返回true。
答案 2 :(得分:0)
第一次检查:array === []
检查两个阵列是否属于同一类型(检查),以及它们是否是同一个阵列。
结果为假的原因是:
array
存储在位置A中,[]
存储在其他位置。这是由javascript如何使用数组和对象引起的:javascript不检查内容,它只检查它们是否指向内存中的同一个数组或对象。这就是你必须使用第二个选项的原因。
更详细的例子:
// for strings and numbers, javascript checks CONTENT
let a = 'Bill';
let b = 'Bill';
console.log(a === b); // TRUE
// for arrays and objects, javascript checks POINTERS
let a = ['Bill'];
let b = ['Bill'];
console.log(a === b); // FALSE
// also:
var a = ['Bill'];
var b = a;
console.log(a === b); // TRUE
a = ['Joe'];
console.log(a === b); // TRUE
console.log(b); // 'Joe'