Javascript 当我们使用json键作为JS代码时会发生什么?
在JavaScript中,我知道我们可以执行以下操作: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> 浏览器如何理解这些名称和胡言乱语? 这背后
<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数据。让我们以objectobj
为例:
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,我还没有太多时间检查您的答案(动手实验)。所以我没有标出答案。