Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在javascript对象中使用数字吗?_Javascript - Fatal编程技术网

我可以在javascript对象中使用数字吗?

我可以在javascript对象中使用数字吗?,javascript,Javascript,我的理解是,对象的键总是字符串。然而,我相信如果用作键,数值将被转换为字符串,这意味着它不会是某种禁止的值类型。 因为我们在字符串键周围不使用引号,所以编写如下内容: { a: "a_value", b: "b_value", [...] } 。。。我想读这样的东西会更容易: { 1: "first_value", 4: "whatever", [...] } 所以我的问题是:使用数值作为键是否真的被认为是不好的做法,或者我是否可以这样做,至少是为了可读性 谢

我的理解是,对象的键总是字符串。然而,我相信如果用作键,数值将被转换为字符串,这意味着它不会是某种禁止的值类型。 因为我们在字符串键周围不使用引号,所以编写如下内容:

{
    a: "a_value",
    b: "b_value", [...]
}
。。。我想读这样的东西会更容易:

{
    1: "first_value",
    4: "whatever", [...]
}
所以我的问题是:使用数值作为键是否真的被认为是不好的做法,或者我是否可以这样做,至少是为了可读性

谢谢。

任何值都可以作为JavaScript对象中的属性使用,只需一个catch-如前所述,在该值上调用[ToString]即可获得属性名称1

因此,对象文字{1:hi}等价于{1:hi}

现在,允许的语法是{PropertyName:AssignmentExpression,…},其中PropertyName只能是IdentifierName x、StringLiteral 1或NumericLiteral 1。其他值仍然可以用作键-只是不能使用对象初始化器语法声明

无效文字的示例,以及如何使用普通属性赋值重写它:

x = {/regex/: "y"};        // invalid - only Name/String/Number allowed
x = {}; x[/regex/] = "y";  // "okay" - but very suspect!
也就是说,除了处理数组,我不能说我曾经使用过integer属性。。这并不意味着它是错的,即使可能是可疑的

1这适用于属性访问,例如obj[x]=y,但不直接适用于对象初始值设定项,因为标识名不被视为表达式-但是,所有属性名为字符串的最终结果仍然适用。

任何值都可以用作JavaScript对象中的属性,只需一个catch-如[ToString]所述对值调用以获取属性名称1

因此,对象文字{1:hi}等价于{1:hi}

现在,允许的语法是{PropertyName:AssignmentExpression,…},其中PropertyName只能是IdentifierName x、StringLiteral 1或NumericLiteral 1。其他值仍然可以用作键-只是不能使用对象初始化器语法声明

无效文字的示例,以及如何使用普通属性赋值重写它:

x = {/regex/: "y"};        // invalid - only Name/String/Number allowed
x = {}; x[/regex/] = "y";  // "okay" - but very suspect!
也就是说,除了处理数组,我不能说我曾经使用过integer属性。。这并不意味着它是错的,即使可能是可疑的


1这适用于属性访问,例如obj[x]=y,但不直接适用于对象初始值设定项,因为标识符名称不被视为表达式-但是,所有属性名称都是字符串的最终结果仍然适用。

属性名称必须是字符串,这是正确的,但转换是为您完成的。也就是说,o={1:test}与o={1:test}是一样的。类似地,o[45]和o[45]=hi都使用toString为您转换属性名

下面是一个快速的演示,我已经覆盖了toString以使其更为明显:

var o = {xyz: 100, toString: function() { console.log("someone string'd me"); return "ooo"; }}
var x = {};

x[o] = "test";
// console says "someone stringed me"

console.log(x["ooo"]);
// console says "test";

console.log(x[o]);
// console says "someone string'd me", then "test"

您可以看到,每次将o用作属性时,它都会使用o.toString隐式转换为字符串。因此,要明确的是,使用数字键不是问题。事实上,您可以测试[hi,ol,dad][1]并看到它与[hi,ol,dad][1]是一样的。

属性名必须是字符串,这是正确的,但转换是为您完成的。也就是说,o={1:test}与o={1:test}是一样的。类似地,o[45]和o[45]=hi都使用toString为您转换属性名

下面是一个快速的演示,我已经覆盖了toString以使其更为明显:

var o = {xyz: 100, toString: function() { console.log("someone string'd me"); return "ooo"; }}
var x = {};

x[o] = "test";
// console says "someone stringed me"

console.log(x["ooo"]);
// console says "test";

console.log(x[o]);
// console says "someone string'd me", then "test"

您可以看到,每次将o用作属性时,它都会使用o.toString隐式转换为字符串。因此,要明确的是,使用数字键不是问题。事实上,您可以测试[hi,ol,dad][1]并看到它与[hi,ol,dad][1]是一样的。

所以您要特别询问对象文本中的标识符语法?一个具有数字索引的对象?这叫做数组。我真的不明白你在问什么。如果您知道所有属性值都转换为字符串,那么字符串是否为数字又有什么关系呢?@am not我是:我知道JavaScript可以做到这一点,但这并不一定意味着可以这样做。这可能是某种不好的做法或其他什么。@nseptier:JavaScript数组是稀疏的。它们实际上只是对象,.length表示最高索引+1。阵列中的孔没有分配。myArray[1]=abc;myArray[4]=def;myArray中的3;//False那么您是专门询问对象文字中的标识符语法?一个具有数字索引的对象?这叫做数组。我真的不明白你在问什么。如果您知道所有属性值都转换为字符串,那么字符串是否为数字又有什么关系呢?@am not我是:我知道JavaScript可以做到这一点,但这并不一定意味着可以这样做。这可能是某种不好的做法或其他什么。@nseptier:JavaScript数组是稀疏的。它们实际上只是对象,.length表示最高索引+1。阵列中的孔没有分配。myArray[1]=abc;myArray[4]=def;myArray中有3个// 错误的