ES5 严格模式、json、对象的扩展

 

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);

 

posted @ 2020-10-20 19:06  石海莹  阅读(223)  评论(0编辑  收藏  举报