Javascript 当我们使用json键作为JS代码时会发生什么?

Javascript 当我们使用json键作为JS代码时会发生什么?,javascript,json,Javascript,Json,在JavaScript中,我知道我们可以执行以下操作: <script> var obj = JSON.parse('{ "name":"John", "age":30, "gibberish":"New York"}'); document.getElementById("demo").innerHTML = obj.name + ", " + obj.gibberish; </script> 浏览器如何理解这些名称和胡言乱语? 这背后

在JavaScript中,我知道我们可以执行以下操作:

    <script>
    var obj = JSON.parse('{ "name":"John", "age":30, "gibberish":"New York"}');
    document.getElementById("demo").innerHTML = obj.name + ", " + obj.gibberish;
    </script>
浏览器如何理解这些名称和胡言乱语? 这背后发生了什么?有没有例外,我们不能这样使用它

提前感谢

'{“姓名”:“约翰”,“年龄”:30,“胡言乱语”:“纽约”}'
是一个
JSON
字符串。您需要使用转换

转换为对象后,如下图所示

var obj=JSON.parse('{“name”:null,“age”:30,“胡言乱语”:“newyork”}');

log(obj)
在您的例子中,
obj
是一个JavaScript对象,不再是JSON对象,如@zb所述。您可以使用
JSON.parse
将JSON字符串(如
'{“name”:“John”,“age”:30,“gibberish”:“New York”}')
转换为JS对象。这将返回一个对象。在JavaScript中,每个对象都有属性。因此,属性是与对象关联的值。
obj.name
中的点注释实质上是检索
name
属性的值,该属性在
obj
上定义。同样的情况也适用于对象胡言乱语

浏览器知道如何处理对象,并允许您使用点符号访问属性。访问对象上定义的属性的另一种方法是使用方括号表示法,例如
obj['name']
。它看起来很像使用数组,但这里的区别在于
obj
是一个对象而不是数组。此外,传入的不是索引,而是要访问的属性的名称(作为字符串)

幕后发生的事情是,您的代码将被解释,表达式
obj.name
的计算结果为
John
obj.gibberish
的计算结果为
New York

.innerHTML
而言,您将为它分配
name
gibberish
属性的值,并用逗号连接它。实际上,
innerHTML
是在对象上定义的另一个属性,在您的例子中,它是由
document.getElementById(“demo”)
返回的本机DOM元素。它允许您设置该元素的HTML内容。如果我们假设

元素的内部html为空,并且您调用了一个函数,在该函数中您将值重新分配到
obj.name+,“+obj.gibberish
,那么该元素的html内容将如下所示:

<p id="demo">John, New York</p>
此处
地址
未定义
,导致以下错误
未捕获类型错误:无法读取未定义
的属性“street”。这不适用于
obj.name.firstname
。虽然
name
没有名为
firstname
的属性,但由于它是一个字符串,因此不会出现相同的错误。它只返回
未定义的
。您可能认为可以在字符串上创建属性。但是,字符串与
数字
布尔
未定义
一起是JavaScript的基本类型之一。那些基本类型不能具有属性。只有一种非基本类型:可以具有属性的对象


我上面提到的关于在基元类型上没有属性的唯一例外是,如果使用getter和setter。这意味着,如果为给定属性定义了getter,则可以在基元类型上创建属性。但这有点离题了,我想把你们引向这里,在那里你们可以找到更多关于
set
get

的信息来访问我们使用的
点符号的Javascript中的
JSON数据。让我们以object
obj
为例:

var obj = { "name":"John", "age":30, "gibberish":"New York"}
obj.name // John
obj.age // 30
obj.gibberish // New York
obj["name"] // John
obj["age"] // 30
obj["gibberish"] // New York
为了访问属性,我们将使用如下点表示法:

var obj = { "name":"John", "age":30, "gibberish":"New York"}
obj.name // John
obj.age // 30
obj.gibberish // New York
obj["name"] // John
obj["age"] // 30
obj["gibberish"] // New York
这里,变量
obj
在前面,后面是一个点,后面是要访问的键

要打印这些值,我们可以在JavaScript中使用
alert()
console.log()

我们还可以使用方括号语法从
JSON
访问属性值。要访问它,我们必须将密钥保留在方括号内的双引号中。像这样

var obj = { "name":"John", "age":30, "gibberish":"New York"}
obj.name // John
obj.age // 30
obj.gibberish // New York
obj["name"] // John
obj["age"] // 30
obj["gibberish"] // New York

obj
在您的示例中,它不是一个JSON对象,而是一个javascript对象。您能标记其中一个答案以感谢他们为帮助您所做的工作吗?谢谢,Tribal,我还没有太多时间检查您的答案(动手实验)。所以我没有标出答案。