我来自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
浏览器怎么能理解这个名字和乱码? 这背后发生了什么?有没有例外我们不能这样用它?
提前致谢
答案 0 :(得分:2)
'{ "name":"John", "age":30, "gibberish":"New York"}'
是JSON
字符串。您需要使用Json Object转换JSON.parse
。
转换为Object之后就像这样看
var obj = JSON.parse('{ "name":null,"age":30, "gibberish":"New York"}');
console.log(obj)
&#13;
请参阅console.log
Object 键和值对。您必须从具有相应键的对象获取特定值。
var obj = JSON.parse('{ "name":"John", "age":30, "gibberish":"New York"}');
console.log(obj.name)
&#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
评估为John
,obj.gibberish
评估为New York
。
就.innerHTML
而言,您要为其分配name
和gibberish
属性的值,并将其与逗号连接。实际上,innerHTML
是在对象上定义的另一个属性,在您的情况下,它是document.getElementById("demo")
返回的本机DOM元素。它允许您设置该元素的HTML内容。如果我们假设<p id="demo"></p>
元素的内部html为空,并且您调用一个函数,在该函数中将值重新设置为obj.name + ", " + obj.gibberish
,那么该元素的HTML内容将如下所示:
<p id="demo">John, New York</p>
您可以在行动here中看到这一点。
回答你的上一个问题
是否存在任何我们不能以这种方式使用它的例外情况?
不,无论何时处理对象,都可以使用点或方括号表示法来访问对象的属性。但是,在访问null
或undefined
的属性时会遇到问题,例如
obj.address.street
此处address
为undefined
,导致以下错误Uncaught TypeError: Cannot read property 'street' of undefined
。这不适用于obj.name.firstname
。 Althogh name
没有名为firstname
的属性,因为它是一个字符串,你不会得到同样的错误。它只会返回undefined
。您可能认为可以在字符串上创建属性。但是,字符串是JavaScript的基本类型之一,还有number
,boolean
,null
和undefined
。那些原始类型可以具有属性。只有一种非原始类型: Object 可以具有属性。
我上面所说的关于没有原始类型属性的唯一例外是,如果你使用getter和setter。这意味着如果您为给定属性定义了一个getter,那么您可以在基本类型上创建属性。但这有点偏离主题,我想将您重定向到this和this,您可以在其中找到有关set
和get
的更多信息。
答案 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