我试图像这样检查一个空字符串数组:
var array = ['',''];
//Other code
if (array == ['',''])
//Do stuff
我发现了
['',''] == ['','']
返回false
。这是为什么?我应该使用什么方法来检查空字符串数组?有没有办法让我不必检查每件物品?
答案 0 :(得分:3)
除了建议使用Array#toString
方法之外,我建议将Array#join
与空字符串一起用作分隔符,然后测试结果。优点是,它适用于数组内任意数量的元素。
var bool = array.join('') ? 'not all empty string' : 'all empty string';
答案 1 :(得分:1)
['', ''] == ['', '']
返回false
因为JavaScript数组是对象,JavaScript中的对象具有引用语义。将对象彼此进行比较实际上会比较它们的参考ID,这对于不同的参考将是不同的。所以,即使==
的双方都是"相同"数组,它们是不同的引用。
如果要检查数组是否只包含空字符串,请使用Array.prototype.every
,如下所示:
myArray = ['']
console.log(myArray.every(el => el === '')) // true
myArray = []
console.log(myArray.every(el => el === '')) // true
myArray = ['test']
console.log(myArray.every(el => el === '')) // false

如果您所处的环境没有ES6支持,则可以将el => el === ''
换成function(el) { return el === '' }
。
答案 2 :(得分:0)
你可以这样做:
var arr = ["","", ""].reduce(function (a, b) {
return a + b;
});
if(arr == "") {
console.log('Array is empty');
}

答案 3 :(得分:0)
这也应该起作用:
var arr = [""];
console.log(String.valueOf(arr[0]) === String.valueOf(''));
答案 4 :(得分:0)
根据妮娜(Nina)的回答,这也应该有效!
let arr1 = ['']
const bool1 = !!arr1.join(''); // false
console.log(bool1)
let arr2 = ['String']
const bool2 = !!arr2.join(''); // true
console.log(bool2)
答案 5 :(得分:-1)
var bool = array.toString() === "," ? "all empty string" : "not all empty string";