知识点:
● JSON
● for in 循环
● JSON 序列化
======================================================================================================
JSON(JavaScript Object Notation) javascript对象标记
JSON 是一种轻量级的数据交换格式,它基于ECMAScript的一个子集
JSON 使用 JavaScript 语法来描述数据对象(JSON本身就是对象)
JSON 仍然独立于语言和平台
JSON 解析器 和JSON 库支持许多不同的编程语言
JSON 内部用 键(key) / 值(value) 进行描述,没有 索引值 和 length属性
JSON 值可以是以下几种类型:数字 字符串 布尔值 数组 对象 null
JSON 键(key)的命名,通常使用英文
JSON 值(value)中的中文,通常使用unicode编码,例如:{"name":"张三"}→ {"name":"张三"}
★注意:
理论上说,JSON就是JS对象,但两者是有区别的:
ObjectJSON
属性名不需要引号键名(key)需要用""括起来
属性名中不可以用"-"(减号)键名(key)种可以"-"( 使用"[]"方式读取 )
属性值可以是函数(对象方法)键值(value)不可以是函数
JSON 数据的遍历
for in 循环
例:
var obj={"name":"zhangsan","age":18}
for(var key in json){ //key 代表键名
alert( key+":"+ json[key] ) //分别弹出: name:zhangsan age:18
}
-----------------------------------------------------------------------------------------------------------------------------------
JSON 序列化:
对象只有在JS语句运行时才有意义,对象是以字符串形式保存在电脑中,使用该数据时,再转换成对象。
序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。
JSON方法:(IE8以上)
序列化对象:对象→字符串
var obj = { x: 1, y: 2}
JSON.stringify( obj ); // {"x":1,"y":2}:返回一个字符串
反序列化成对象: 字符串→对象
var str = '{ "name":"zhangsan","age":18 }'; // 字符串的键(key)要用引号框起来
var Obj= JSON.parse(str);
console.log(Obj.name); // => zhangsan:输出对象属性x的值
兼容IE6/7/8
JSON官方兼容插件:Json2.js
-----------------------------------------------------------------------------------------------------------------------------------
JSON在线格式化:
https://tool.chinaz.com/tools/jsonformat.aspx
https://tool.oschina.net/codeformat/json
JSON在线压缩:
https://www.bejson.com/zhuanyi/
=====================================================================================================
JavaScript解释器工作原理
JavaScript解释器在执行脚本时,是按块(一对script标签,为一段代码块)来执行的。
浏览器在解析HTML文档流时,如果遇到一个<script>标签,则JavaScript解释器会等到这个代码块都加载完后,先对代码块进行预编译,然后再执行。
执行完毕后,浏览器会继续解析下面的HTML文档流,同时JavaScript解释器也准备好处理下一个代码块。
由于JavaScript是按块执行的,所以如果在一个JavaScript块中调用后面块中声明的变量或函数就会提示语法错误。
虽然JavaScript是按块执行的,但是不同块都属于同一个全局作用域,块之间的变量和函数是可以共享的,但是要注意声明的先后顺序。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JavaScript预编译(预解析)
JavaScript的“编译”只是检查有没有代码错误,不会运行代码
1、先预定义变量,再预定义函数,在这个阶段,当前作用域中的变量和函数,将被提升到作用域的顶部
2、变量的预编译只作声明,并未赋值
3、function语句定义的函数,不仅声明了函数名,而且函数体也进行了处理
4、匿名函数不会预编译
★常见错误:
Uncaught SyntaxError:未知的语法错误
Uncaught TypeError: 未知的类型错误
Uncaught RangeError:未知的范围(无限死循环)
Unexpected token:意外的符号