7

我对 Javascript 比较陌生,可能只是一个我不熟悉的技巧,但是如何将布尔值分配给数组键?

发生了什么:

var test = new Array();
test[false] = "asdf";
test['false'] = "fdsa";

Object.keys(test); // Yield [ "false" ]
Object.keys(test).length; // Yield 1

我想要发生的事情:

var test = new Array();

//Some stuff

Object.keys(test); // Yield [ "false" , false ]
Object.keys(test).length; // Yield 2
4

4 回答 4

11

您不能在数组中使用任意索引,但您可以使用对象文字来(某种程度上)完成您所追求的:

var test = {};
test[false] = "asdf";
test['false'] = "fdsa";

但是应该注意,对象属性必须是字符串(或可以转换为字符串的类型)。使用布尔原语最终会创建一个名为'false'.

test[false] === test['false'] === test.false

这就是为什么您的第一个示例的Object.keys().length调用仅返回1.

对于 JavaScript 中的对象的优秀入门指南,我推荐 MDN 的Working with objects

于 2013-01-24T04:34:50.660 回答
3

Javascript 中的数组不是关联的,因此您不能将值分配给其中的键。

var test = [];
test.push(true);  // [true]
test.push(false); // [true, false]

你对一个对象感兴趣!

var test    = {};
test[true]  = "Success!";
test[false] = "Sadness";  // {'false': "Sadness", 'true': "Success"}
于 2013-01-24T04:34:17.433 回答
1

Javascript 数组仅基于数字索引。您可以使用 0 和 1 作为键(尽管我想不出需要布尔键的情况)。myArr[0] = "mapped from false"; myArr[1] = "mapped from true";

于 2013-01-24T04:33:53.817 回答
1

您也可以反转上面的答案,例如

let test = [true];

console.log(typeof test);

// Output: Object True
于 2019-03-09T23:50:08.640 回答