ES5
javascript最早是由网景公司推出的,极其简单,被很多开发者接受,逐渐流行起来,后来IE为了抢占市场微软,将IE浏览器内置在windows系统中,所以IE的市场占有率相当的高。IE脚本语言是Jscript(vbscript)
好消息是移动端基本都是webkit内核,因此我们可以放心的使用html5,css3,ES5规范等等
在pc端,由于高级浏览器都实现了html5,css3,ES5规范等等,所以我们可以直接用高级浏览器测试它们
ES规范版本 ES1, ES2, ES3, ES4, ES3.1, ES5, ES6, ES2016, ES2017, ES2018
ES5跟ES3区别不是很大。
只是在ES3基础上新增了一些数组的方法和对象的拓展。
JSON拓展
ES5为了json字符串和JS对象互相转换, 新增了JSON内置对象。
该对象有两种方法: parse 、stringify
该方法用于将JSON字符串转为JSON对象
使用方式:
JSON.parse( jsonStr , reviver( key , value ){
参数:
必需,一个有效的 JSON 字符串
reviver:可选,一个转换结果的函数, 将为对象的每个成员调用此函数
返回值:json字符串转换为的JS对象
注意:
JSON 不能存储 Date 对象。需要存储 Date 对象,需要将其转换为字符串,之后解析数据再将字符串转换为 Date 对象。
JSON 不允许包含函数,但可以将函数作为字符串存储,之后再将字符串转换为函数。不建议在 JSON 中使用函数。
reviver参数注意点:
reviver
reviver
this
reviver
reviver
undefined
,则当前属性会从所属对象中删除,如果返回了其他值,则返回的值会成为当前属性新的属性值。
reviver
""
this
{"": 修改过的解析值}
reviver
JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) { console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的, // 最后一个属性名会是个空字符串。 return v; // 返回原始属性值,相当于没有传递 reviver 参数。 });
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> // 定义json字符串 var str = '{"a": 1, "b": "2", "c": {"d": 3}}' // 转为对象 var obj = JSON.parse(str, function(key, value) { // this指向是 转化成的json对象 // arguments里面有两个值,是每一个键值对的key value console.log(this, arguments) // 把所有的字符串转为数字 if (typeof value === "string") { // 转为数字 // 一元加运算符 对于数字进行自增 对于非数字进行类型转化成number 相当于Number() return +value; } return value; }); </script> </body> </html>
该方法用于将JSON对象תΪJSON字符串
使用方式:
JSON.stringify( json , replacer ,space)
参数:
必需, 要转换的 JavaScript 值(通常为json对象或数组)
- , 转换成相应的字符串被添加入JSON字符串。
String
, 该字符串作为属性值被添加入JSON。Boolean
- 如果返回任何其他对象,该对象递归地序列化成JSON字符串,对每个属性调用replacer方法。除非该对象是一个函数,这种情况将不会被序列化成JSON字符串。
- 如果返回undefined,该属性值不会在JSON字符串中输出。
space:
返回值:返回包含 JSON 文本的字符串
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> // 定义js对象 var obj = { a: 1, b: "2", c: { d: 3 } } // 将对象转为字符串 var str = JSON.stringify(obj, function(key, value) { // this指向是 转化成的json对象 // arguments里面有两个值,是每一个键值对的key value console.log(this, arguments) // 将字符串转为数字 if (typeof value === "string") { return +value } return value }) // console.log(str) </script> </body> </html>