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

时间:2017-05-27 08:23:14

标签: javascript json

我来自C ++并且对JavaScript知之甚少。

在JavaScript中,我知道我们可以做到以下几点:

    <script>
    var obj = JSON.parse('{ "name":"John", "age":30, "gibberish":"New York"}');
    document.getElementById("demo").innerHTML = obj.name + ", " + obj.gibberish;
    </script>

这是W3School的一个例子。当然,JSON对象可以从任何地方获取。但我很好奇当我们使用

时发生了什么
    obj.name or obj.gibberish

浏览器怎么能理解这个名字和乱码? 这背后发生了什么?有没有例外我们不能这样用它?

提前致谢

3 个答案:

答案 0 :(得分:2)

'{ "name":"John", "age":30, "gibberish":"New York"}'JSON字符串。您需要使用Json Object转换JSON.parse

转换为Object之后就像这样看

&#13;
&#13;
var obj = JSON.parse('{ "name":null,"age":30, "gibberish":"New York"}');
console.log(obj)
&#13;
&#13;
&#13;

请参阅console.log Object 键和值对。您必须从具有相应键的对象获取特定值。

&#13;
&#13;
    var obj = JSON.parse('{ "name":"John", "age":30, "gibberish":"New York"}');
   console.log(obj.name)
   
&#13;
&#13;
&#13;

eg : obj.name

首先获取整个obj数据,然后获取密钥的特定值代表name。这个过程与对象的所有键值对obj.gibberish =&gt; {{1 }}

答案 1 :(得分:1)

在你的情况下,obj是一个JavaScript对象而不是JSON对象,如@zb所述。您可以使用'{ "name":"John", "age":30, "gibberish":"New York"}'将JSON字符串(例如JSON.parse)转换为JS对象。这会返回一个对象。在JavaScript中,每个对象都有属性。因为这些属性是与对象相关联的值。 obj.name中的点符号实质上是检索name上定义的obj属性的值。同样适用于obj.gibberish

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

幕后发生的事情是您的代码将被解释,表达式obj.name评估为Johnobj.gibberish评估为New York

.innerHTML而言,您要为其分配namegibberish属性的值,并将其与逗号连接。实际上,innerHTML是在对象上定义的另一个属性,在您的情况下,它是document.getElementById("demo")返回的本机DOM元素。它允许您设置该元素的HTML内容。如果我们假设<p id="demo"></p>元素的内部html为空,并且您调用一个函数,在该函数中将值重新设置为obj.name + ", " + obj.gibberish,那么该元素的HTML内容将如下所示:

<p id="demo">John, New York</p>

您可以在行动here中看到这一点。

回答你的上一个问题

  

是否存在任何我们不能以这种方式使用它的例外情况?

不,无论何时处理对象,都可以使用点或方括号表示法来访问对象的属性。但是,在访问nullundefined的属性时会遇到问题,例如

obj.address.street

此处addressundefined,导致以下错误Uncaught TypeError: Cannot read property 'street' of undefined。这不适用于obj.name.firstname。 Althogh name没有名为firstname的属性,因为它是一个字符串,你不会得到同样的错误。它只会返回undefined。您可能认为可以在字符串上创建属性。但是,字符串是JavaScript的基本类型之一,还有numberbooleannullundefined。那些原始类型可以具有属性。只有一种非原始类型: Object 可以具有属性。

我上面所说的关于没有原始类型属性的唯一例外是,如果你使用getter和setter。这意味着如果您为给定属性定义了一个getter,那么您可以在基本类型上创建属性。但这有点偏离主题,我想将您重定向到thisthis,您可以在其中找到有关setget的更多信息。

答案 2 :(得分:0)

要在Javascript中访问JSON data,我们使用dot notation。让我们以对象obj

为例
var obj = { "name":"John", "age":30, "gibberish":"New York"}

为了访问这些属性,我们将使用这样的点符号

obj.name // John
obj.age // 30
obj.gibberish // New York

此处,变量obj首先是后跟一个点,然后是要访问的键。

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

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

obj["name"] // John
obj["age"] // 30
obj["gibberish"] // New York