Javascript 在对象文字中指定数值不会引发任何错误

Javascript 在对象文字中指定数值不会引发任何错误,javascript,node.js,Javascript,Node.js,考虑以下代码: let logged=1; 设x={logged}/{logged:1} x['logged'];//1. x['logged']['index']//未定义 x['logged']['index']=0; x、 //{已记录:1} x['logged']['index']//未定义不确定我上面的评论是否真的为您充分说明了这个问题 我已经写了一个小程序,它可能有助于可视化所发生的事情。注意,我正在对原语值进行方法查找,而不是常规的属性查找,但这一切都是一样的,可以更好地说明发生

考虑以下代码:

let logged=1;
设x={logged}/{logged:1}
x['logged'];//1.
x['logged']['index']//未定义
x['logged']['index']=0;
x、 //{已记录:1}

x['logged']['index']//未定义
不确定我上面的评论是否真的为您充分说明了这个问题

我已经写了一个小程序,它可能有助于可视化所发生的事情。注意,我正在对原语值进行方法查找,而不是常规的属性查找,但这一切都是一样的,可以更好地说明发生了什么

function captureThis() {
    return this
}
(function setUpObjectPrototype() {
    if (Object.prototype.captureThis !== undefined) throw new Error("Couldn't set up Object prototype properly.")
    Object.prototype.captureThis = captureThis
    process.nextTick(() => delete Object.prototype.captureThis)
})()

var number = 1
var thisObject = number.captureThis()

console.log("Is thisObject an object? " + (typeof thisObject == "object"))
console.log("Is number still just a number? " + (typeof number == "number"))
console.log("Is thisObject an instance of Number? " + (thisObject instanceof Number))

// Output
// Is thisObject an object? true
// Is number still just a number? true
// Is thisObject an instance of Number? true
请注意,在任何情况下,数字变量都不会被强制为对象-创建一个临时对象来包装数字变量中包含的值。这个对象从来没有实际分配给变量,除非它像在这个小程序中一样被捕获


希望这会有所帮助。

这是因为原始对象包装器。基本上,每当您尝试在对象上下文中使用原语时,javascript都会尝试将原语装箱到其包装器对象中。如果您熟悉它,请您用上下文向我的问题解释一下好吗?因为
1
不是对象,特别是在您编写1['index']或'1'['index']时,您不能向数字添加属性,您表示要为某些内容编制索引。正如您所指出的,不可能为原语值编制索引,因此javascript通过将数字/字符串装箱到新的数字(1)/字符串(“1”)并对其编制索引来解决这个问题。