{"ad":[{"id":1,}],"nav_list":[{"display_download":0,"menu_id":"7","site_id":5}]}进行JSON.parse转换后display_download变成了true,为什么
时间: 2023-08-22 10:07:02 浏览: 81
在JSON中,0和1分别表示false和true。在这个JSON中,display_download的值为0,即false。但是,如果在解析JSON时使用eval()函数,它将把0解析为数字0,而不是布尔值false。因此,如果使用eval()函数解析这个JSON,display_download将被解析为数字0,而不是布尔值false。此外,使用eval()函数解析JSON还存在安全风险,因为它允许执行任意代码。因此,不建议使用eval()函数解析JSON。建议使用JSON.parse()方法来解析JSON。
相关问题
let res=JSON.parse({"ad":[{"id":1,}],"nav_list":[{"display_download":0,"menu_id":"7","site_id":5}]})为什么与console.log(JSON.parse({"ad":[{"id":1,}],"nav_list":[{"display_download":0,"menu_id":"7","site_id":5}]}的值不一样)
这是因为在你的代码中,JSON.parse() 方法的参数应该是一个字符串,而你传递了一个对象。正确的写法应该是将对象转换为 JSON 字符串,然后再调用 JSON.parse() 方法。例如:
```
let res = JSON.parse('{"ad":[{"id":1}],"nav_list":[{"display_download":0,"menu_id":"7","site_id":5}]}');
console.log(res);
```
或者你可以直接将对象赋值给变量,这样不需要调用 JSON.parse() 方法。例如:
```
let res = {"ad":[{"id":1}],"nav_list":[{"display_download":0,"menu_id":"7","site_id":5}]};
console.log(res);
```
这两种写法输出的结果应该是一样的。
为什么console.log(JSON.parse({"ad":[{"id":1,}],"nav_list":[{"display_download":0,"menu_id":"7","site_id":5}]}的输出结果display_download值为0,但是将JSON.parse的结果赋值给变量res后,display_download的值变成true了
首先,需要注意的是,你提供的 JSON 字符串是无效的,需要加上缺失的右括号 `}` 才能被正确解析。假设你的 JSON 字符串是这样的:
```
{"ad":[{"id":1}],"nav_list":[{"display_download":0,"menu_id":"7","site_id":5}]}
```
JSON 中的布尔类型只有两个值:`true` 和 `false`。在 JavaScript 中,`0` 被视为 `false`,非零数字被视为 `true`。所以,当你使用 `JSON.parse` 解析 JSON 字符串时,`display_download` 的值为 `0`,被视为布尔值 `false`。
但是,当你将解析后的结果赋值给变量 `res` 时,`res.nav_list[0].display_download` 的值被转换为 JavaScript 中的布尔类型。由于 `0` 被视为 `false`,所以 `display_download` 的值被转换为布尔值 `false`。如果你想保持 `0` 值不被转换,可以将其转换为字符串,如下所示:
```
JSON.parse('{"ad":[{"id":1}],"nav_list":[{"display_download":"0","menu_id":"7","site_id":5}]}')
```
这样,解析后的结果中 `display_download` 的值就是字符串 `"0"`,而不是数字 `0`,被视为布尔值 `true`。