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

     

  • 相关阅读:
    HTML5学习笔记第二节(Email标签(自动验证格式),Number标签,URL标签...)
    Ping检测工具(QQ皮肤实现)
    C#多线程|匿名委托传参数|测试您的网站能承受的压力|附源代码
    PostgreSQL抛错“不良的类型值: long”之解决
    jdbcTemplate.queryForInt()过时替换方法
    Windows Phone 实用开发技巧(27):创建透明Tile
    快乐技术沙龙技术分享之账户助手
    Windows Phone 实用开发技巧(11):让StackPanel中的控件靠右对齐
    Windows Phone 实用开发技巧(19):使用ProgressIndicator做进度显示
    Windows Phone 实用开发技巧(13):自定义Element Binding
  • 原文地址:https://www.cnblogs.com/shihaiying/p/13848300.html
Copyright © 2020-2023  润新知