zoukankan      html  css  js  c++  java
  • 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);

     

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/shihaiying/p/13848300.html
Copyright © 2011-2022 走看看