1、严格模式
严格模式
简介:除了正常模式,ES5添加了一种运行模式,严格模式
定义严格模式 使用字符串 ‘ust strict’
声明 : use strict
注意
1)定义变量必须使用变量声明符
NormalText Code
1 2 3 4 5 6 7 8 9 10
|
|
使用严格模式定义变量 必须使用变量的声明符号 混杂模式定义变量 num = 100; console.log(num); 'use strict';
num = 200; console.log(num); username = '里斯'; console.log(username);
|
2)不允许删除变量
NormalText Code
1 2 3 4 5 6 7 8 9 10 11
|
|
在JS中是可以删除变量或者是对象属性的 但是在严格模式中 不可以删除变量 var num = 123; console.log(delete num); console.log(num);
严格模式中删除变量 'use strict'; var age = 18; console.log(delete age); console.log(age);
|
3)不允许使用this调用当前window函数
NormalText Code
1 2 3 4 5 6 7 8 9 10 11 12
|
|
严格模式中 this不能调用window对象 function funName(){ return this; } console.log(funName());
在严格模式中返回this 'use strict'; function fun(){ return this; } console.log(fun());
|
4)八进制使用0o开头
NormalText Code
1 2 3 4 5 6 7 8
|
|
在JS中默认打印是八进制 只要是使用0开头的 打印的就是八进制 所以说 在严格模式中 打印八进制 必须使用0o开头 console.log(034);
严格模式中 'use strict'; console.log(056); console.log(0o67);
|
5)eval只能识别简单的运算
NormalText Code
1 2 3 4 5 6 7 8 9 10 11 12
|
|
// eval函数在严格模式中 只能做数学运算 // eval函数能够识别参数字符串中所有的JS代码 解析JS代码 // console.log('12+13'); // console.log(eval('12+13')); // eval('var num = 100;'); // console.log(num);
// 但是在严格模式中 eval不能解析代码 只能做简单的数学运算 // 'use strict'; // eval('var num = 100;'); // console.log(num); // console.log(eval('12+13'));
|
2、JSON
JSON是一种数据解构
类似于JS中的对象 和其他语言中的一些数据解构
他独立于语言和平台 每一种语言都能将其中之一的数据类型转换成JSON
也都能将JSON转换成数据类型 不会造成数据的流失
JSON.stringify : 序列化 将对象转化为JSON
NormalText Code
1 2 3 4 5 6 7 8 9 10 11 12 13
|
|
var obj = { name : 'Eric', age : 18, sex : '男' };
console.log(obj); console.log(typeof obj);
// 转化为JSON var json = JSON.stringify(obj); console.log(json); console.log(typeof json);
|
JSON.parse : 反序列化 将JSON转换为对象
NormalText Code
1 2 3 4 5 6 7
|
|
var newObj = JSON.parse(json); console.log(newObj); console.log(typeof newObj);
var j = '{"name" : "Mary","age" : 13,"sex" : "女"}'; console.log(j);
|
3、对象的扩展
Create : 以一个对象为原型创建另一个对象
其实他就是实现了对象的继承 创建的新的对象继承了原型对象的属性和方法
内置两个参数
第一个参数是一个原型对象
第二个参数是描述 描述本身就是一个对象
对象中的属性名是新增的属性名字
对象中的值 还是一个对象 对象中有四个属性
第一个属性 value 他的值是新增的属性值
第二个属性 writable 是否可写 是否可以修改
第三个属性 enumerable 是否枚举 是否可遍历
第四个属性 configurable 是否可删除
以上三个属性默认为false
返回值是一个新的对象
NormalText Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
|
// 定义一个原型对象 let obj = { name : 'Eric', age : 18, sex : '男' };
// create方法 var newObj = Object.create(obj,{ school : { value : '吉林大学', writable : false, configurable : false, enumerable : false }, address : { value : '吉林长春', writable : true, configurable : true, enumerable : true }, birth : { value : '2002-03-04' } })
// console.log(obj); // console.log(newObj); // console.log(newObj.name);
// 现在定义的两个属性 school 不可改写 不可删除 不可遍历 // address可改写 可删除 可遍历 // 是否可改写 // newObj.address = '北京市'; // newObj.school = '北京大学'; // newObj.birth = '2003-05-06';
// 是否可删除 // delete newObj.address; // delete newObj.school; // delete newObj.birth;
// 是否可遍历 for (var key in newObj){ console.log(newObj[key]); }
console.log(newObj);
|
defineProperties : 给对象添加属性
内置两个参数
第一个参数是原型对象
第二个参数是描述 描述是一个对象
对象的属性名是新增的属性名 对象的属性值是对象
对象中内置两个方法
Get方法
当你获取这个属性的时候 会被自动调用
Set方法
Set方法可以接受一个参数 参数是你修改的内容
当你修改这个属性的时候 会被自动调用
NormalText Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
|
var obj = { lastName : '康', firstName : '柏松' };
// 给对象添加一个属性是全名 Object.defineProperties(obj,{ fillName : { get : function(){ return this.lastName + this.firstName; }, set : function(params){ // console.log(params); this.lastName = params.slice(0,1); this.firstName = params.slice(1); } } })
// 测试 // obj.fillName; // obj.fillName = '张三';
// 调用 console.log(obj.fillName); obj.fillName = '李斯'; console.log(obj.fillName);
|