为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
492人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 原型链上有z get,如果要在obj上新增一个z,用

    Object.defineProperty(obj,'z',{value:100});

    查看全部
  • 对象标签:[[proto]]

                    [[class]]

                    [[extensible]] 表示对象是否可扩展,是否可继续添加

    slice(8,-1)截取从第8个字符开始一直到最后并去掉最后一个字符

    var toString = Object.prototype.toString;
    function getType(o){return toString.call(o).slice(8,-1);};
    
    toString.call(null);// "[object Null]"
    getType(null);//"Null"
    getType(undefined);//"Undefined"
    getType(1);"Number"
    getType(new Number(1));//"Number"
    typeof new Number(1);//"object"

    extensible

    var obj = {x:1,y:2};
    Object.isExtensible(obj);//true
    Object.preventExtensions(obj);//阻止扩展,但是不会修改属性标签的状态
    
    Object.seal(obj);//阻止扩展,但是会把属性标签configurable改成false
    Object.isSealed(obj);//该方法判断对象是否被seal隐藏
    
    Object.freeze(obj);//阻止扩展,但是会把属性标签configurable和writable改成false
    Object.isFrozen(obj);
    !!!以上操作均不会影响原型链

    序列化:JSON.stringify(obj);

            !!!如果对象的属性值为undefined时,不会出现在序列化结果中

                如果对象的属性值为NaN时,序列化结果会转化为null  

                如果对象的属性值为new Date()时, 序列化结果会转化为UTC的格式     

    后端返回数据变成javascript对象JSON.parse

    toString

    valueOf

    查看全部
  • Object.keys(person);//返回所有可枚举的属性

    Object.defineProperies(person,{
        title:{value:'fe',enumerable:true},
        corp:{value:'baba',enumerable:true},
        salary:{value:'50000',enumerable:true,writable: true},
    });
    Object.getOwnpropertyDescriptor(person,'salary');
    //Object{value:50000,writable:true,enumerbale:true,configurable:false} 未定义的属性标签默认都是false


    查看全部
  • val = +val;//把它变成数字

    get/set与原型链

    function foo(){}
    Object.defineProperty(foo.prototype,'z',{
        get: function(){return:1;}
    });
    var obj = new foo();
    
    obj.z;// 1
    obj.z = 10;
    obj.z;// still 1
    // 当obj中没有z属性,并向原型链上查找的时候有对应的get/set方法时,再赋值的时候会走原型上的相应的get/set方法,而不会直接赋值给obj
    
    // 想要赋值给obj.z
    Object.defineProperty(obj,'z',{
        value: 100,
        configurable: true;
    });
    obj.z;// 100
    delete obj.z;
    obj.z;// back to 1


    查看全部
  • 属性读写

    属性删除:

            Object.prototype属性不能被删除

    delete Object.prototype;//false
    var descriptor =  Object.getOwnPropertyDrscriptor(Object,'prototype');//获取一个属性中的所有标签
    descriptor.configurable;//false。是否可配置

            var 定义的全局变量活着局部变量不会被删除

            全局函数或者局部函数也不可以被删除

    cat.propertyIsEnumerable('legs');//true可枚举的
    cat.propertyIsEnumerable('toString');// false 
    // 原型链上的属性不可枚举

    自定义一个属性,让他的枚举标签是false

    Object.defineProperty(cat,'price'{
        enumerable;false,
        value:10000
    });
    cat.propertyIsEnumerable('price');//false
    cat.hasOwnProperty('price');//true

      操作

    cat.legs *= 2; //乘2
    cat.legs != undefined;//!==undefined or !== null
    cat.legs !== undefined; // !==undefined


    查看全部
  • 不是所有的对象都有原型链或是都有Object.prototype,有toString方法

    查看全部
  • 对象的创建:

            1.字面量:var obj1 = {x:1,y:2};可嵌套

            2.new构造器的方式: prototype是原型是对象属性

    function foo(){}
    foo.prototype.z = 3;
    
    var obj = new foo();// obj的prototype指向foo.prototype
    obj.y = 2;
    obj.x = =1;
    obj.z = 3;// obj中没有z这个值,会向上找原型,原型中有就返回
    // 最上层的原型是Object.prototype --->null 找到null还没有就会返回undefined
    typeof obj.toString;// 'function'
    'z' in obj; //true
    obj.hasOwnProperty('z');// false 说明z不再obj上,而在原型上
    // 会继承原型链上的属性,但是不会去修改他们

            3.Object.create创建对象,create时系统内置函数

    var obj = Object.create({x:1});// 会让对象的原型指向创建的x
    obj.x//1
    typeof obj.toString;// 'function'
    obj.hasOwnProperty('x');// false
    
    var obj = Object.create(null);
    obj.toString //undeined


    查看全部
  • 对象包含一系列无序的属性,每个属性都有一个字符串key和对应的value

    查看全部
  • 严格模式:'use strict';提高错误检查,增强安全性

        不允许适应with

        不允许未声明的变量被赋值

        arguments变为参数的静态副本

        delete参数,函数名报错

        delete不可配置属性报错

        对象字面量重复属性报错

        禁止八进制的字面量

        eval arguments变为关键字,不能作为变量,函数名   

        eval独立作用域 

    查看全部
  • fd();//true 函数可以在声明前执行
    function fd(){
        // do sth
        return true;
    }
    fd();//TypeError。函数表达式不可以
    var fe = function () {
        // do sth
    };

    for...in    顺序不确定

                enumberable为false时不会出现

                for  in 对象属性时受原型链影响

    width语句可以修改当前的作用域

    with({x:1}){
        console.log(x);
    }
    // 可以直接输出,不用对象.属性调用
    with(document.forms[0]){
        console.log(name.value)
    }
    
    var form = document.forms[0];
    console.log(form.name.value);
    /*
    使用with让JS引擎优化更难
    可读性变差。 可被变量定义代替
    严格模式下被禁用
    */


    查看全部
  • ,逗号运算符表达式的每一个元素都会被计算,但是最后取的值是逗号最右边的值

    var obj ={};
    Object.defineProperty(obj,'x',{
        configurable: false,//只有这个标签的值是true时才可以被delete掉
        value:1
    });
    delete obj.x;//false
    obj.x; //1

    in运算符:

            window.x = 1;

            'x' in window;//true

    function Foo(){};
    Foo.prototype.x = 1;
    var obj = new Foo();
    obj.x; //1
    obj.hasOwnProperty('x');//false
    obj._proto_.hasOwnProperty('x'); //true

    this运算符

    this;// window
    var obj = {
        func:function(){return this;}
    };
    obj.func();//obj

    一元运算符void

            void 0 //undefined

            void(0) //undefined

    查看全部
  • 表达式:原始表达式

                    初始化

                    函数

                    属性访问

                     调用

                      对象创建

    查看全部
  • 类型检测的方法:

        typeof:   适合基本类型以及function的检测,遇到null失效

                        100 -->"number"

                        true -->"boolean"

                        function --> "function"

                        undefined --> "undefined"

                        new Object() --> "object"

                        [1,2] --> "object"

                        NaN --> "number"

                        null -->"object"

        instanceof:基于原型链判断对象类型,适合自定义对象,检测原生对象

            obj instanceof Object  左面是对象

                [1,2] instanceof Array === true

               new Object() instanceof Array === false

            若Student.prototype = new Person()

                原型会指向构造器,会向上找原型的原型这样也是true

        !!!不同window或iframe间的对象类型检测不能使用instanceof

        Object.prototype.toString适合内置对象和基元类型,null,undefined失效

                     Object.prototype.toString.apply([]) === "[object Array]"

                    Object.prototype.toString.apply(function(){}) === "[object Function]"

                    Object.prototype.toString.apply(null) === "[object Null]"

                    Object.prototype.toString.apply(undefined) === "[object Undefined]"

        constructor(会被改写)指向构造这个对象的构造器或是构造函数

        duck type判断是否有join,push,length这样的方法来判断是什么类型



    查看全部
  • var str = "string"; //string对象

    var strObj = new String("string");// 包装对象

    查看全部
  • “1.23”== 1.23

    0 == false

    null == undefined  相等

    new Object() == new Object()

    [1,2] ==[1,2]

    1 == true 布尔转number

    object == number | string  尝试将对象转为基本类型

            new String("hi") == "hi"//true

    ===严格等于

    类型不同,返回false

    类型相同,null===null

                    undefined===undefined

                    NaN != NaN 自己和自己比较也不相等

                    newObject != newObject  因为对象比较的不是值是引用


    查看全部

举报

0/150
提交
取消
课程须知
1.您至少学习了本站“JS入门”、“JS进阶”两门基础课程。 2.如您具备一定实践经验对学习有很大帮助。 3.如您没有脚本编程开发经验,学习过程有可能会受挫部分内容或示例代码,请“暂时略过不懂的部分,后面章节会阐述”,当然想透彻学习,还需大量实践来体会知识的内涵。
老师告诉你能学到什么?
结合实例,深入解析以下知识内容: 1. 数据类型、表达式和运算符、语句; 2. 对象、数组、变量、函数; 3. this、闭包和作用域; 4. OOP; 5. 正则与模式匹配。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!