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

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
492人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 特殊运算符

    查看全部
  • hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false

    查看全部
  • 自定义序列化

    https://img1.sycdn.imooc.com//5ac49c630001660808150586.jpg

    其他对象方法

    https://img1.sycdn.imooc.com//5ac49d2700015af508520531.jpg

    查看全部
  • extensible标签

    isExtensible可扩展、

    preventExtensions阻止扩展(没有改变属性标签的值)

    https://img1.sycdn.imooc.com//5ac488780001994109620810.jpg

    <script type="text/javascript">

    var obj = {x:1,y:2};

    Object.isExtensible(obj);  //isExtensible 可扩展的

    obj.z=3;  //将 z=3添加进对象obj中

    console.log(JSON.stringify(obj)); //查看,z已添加进来了

    Object.preventExtensions(obj);  //preventExtensions 阻止扩展 

    obj.a=4; //将 a=4添加进对象obj中

    console.log(JSON.stringify(obj)); //查看,a不能添加进来

       //查看对象的属性标签,都是默认值。preventExtensions阻止扩展后,并没有让属性标签发生改变。

    var p1 = Object.getOwnPropertyDescriptor(obj,"x"); 

    console.log(JSON.stringify(p1)); 

           //输出{"value":1,"writable":true,"enumerable":true,"configurable":true}

     

    //seal()方法在preventExtensions基础上阻止扩展,区别在于configurable为false

    //属性标签不可配置、不能添加新属性、不能删除属性

    Object.seal(obj); 

    var p2 = Object.getOwnPropertyDescriptor(obj,"x");  

    console.log(JSON.stringify(p2));  

    //输出{"value":1,"writable":true,"enumerable":true,"configurable":false}

    Object.isSealed(obj); //true 判断对象obj是否被隐藏

    //freeze()方法,比seal()强度更高,更严格。

    //既不可配置,不能添加删除属性,也不能修改属性值。configurable为false,writable也为false。

    Object.freeze(obj);

    var p3 = Object.getOwnPropertyDescriptor(obj,"x");  

    console.log(JSON.stringify(p3));

    Object.isFrozen(obj); //true 判断对象是否被冻结

    </script>


    查看全部
  • 对象的类型 class

    https://img1.sycdn.imooc.com//5ac4807a00016e9a09510823.jpg

    查看全部
  • 1、创建属性标签的方法: defineProperty(参数1-对象,参数2-属性名,参数3-具体每个属性的值)

    https://img1.sycdn.imooc.com//5ac44e060001b82b09180546.jpg

    2、创建多个属性标签的方法: defineProperties(参数1-对象,参数2-每个属性都是对象)

    3、访问所有属性标签的方法: getOwnPropertyDescriptor(对象,属性名)

    https://img1.sycdn.imooc.com//5ac44f26000132d110250578.jpg

    4、属性里可以添加get/set方法

    https://img1.sycdn.imooc.com//5ac4510e000141e210780628.jpg

    5、总结

    https://img1.sycdn.imooc.com//5ac451570001425e12840724.jpg


    查看全部
  • JS的严格模式:
    定义和优点:严格模式是一种特殊的执行模式,它修复了部分语言上的不足(禁用with),提供了更强的错误检查(重复属性,删除delete不可配置的属性等),并增强了安全性(在eval中使用独立作用域等);
    模式的使用:
    (1)function func(){'use strict';}好处:向上兼容
    (2)'use strict'; function func(){}指定整个js内的代码都是在严格模式下
    与普通模式的区别:
    在严格模式下,①不允许使用with;②不允许未声明的变量被赋值③arguments变为参数的静态副本,不管参数传与不传,对arguments无影响,但是对象的属性除外;④delete参数,函数名报错⑤delete不可配置的属性报错⑥对象字面量重复属性名报错⑦禁止八进制字面量⑧eval,arguments变为关键字,不能作为变量、函数名⑨eval变为独立作用域,其它地方不可以拿到eval的值;

    查看全部
  • try语句如果抛出异常,则执行catch语句,否则不执行,无论有没有异常,都执行finally语句;try语句必须跟catch或finally语句中至少一个组合使用。
    try catch语句的嵌套语句执行顺序:
    1)如果内部嵌套的try语句抛出异常,但内部没有相配套的catch语句,先执行内部的finally语句,然后跳到最近一层的catch语句执行。
    2)如果内部嵌套的try语句抛出异常,内部有相配套的catch语句,先执行此语句处理异常,再执行内部的finally语句。不会再在外部处理异常。
    3)如果内部嵌套的try语句抛出异常,内部有相配套的catch语句,并且catch语句也抛出异常,如果内部的catch语句有对异常的处理,先执行异常处理语句,然后执行内部的finally语句,最后执行离内部catch语句抛出异常最近一层的catch语句处理异常。

    查看全部
  • js中6型数据类型:弱类型特性
    5种原始类型:number(数字)、string(字符串)、boolean(布尔值)、null 、undefined
    1种对象类型:object对象(函数function(Math) ,array, Date,字符串,数值,浏览器对象,DOM对象)

    查看全部
  • <script type="text/javascript">

    var o = {};

    //在o的原型上创建x属性,值为100。默认其他属性为false。

    //如writable=false, configurable=false

    Object.defineProperty(o,'x',{ 

    value: 100

    });

    var obj = Object.create(o); //以字面量对象o为原型创建一个对象obj,得用Object.create()方法

    console.log(obj.x); 

    obj.x = 99;                 //默认writable=false

    console.log(obj.x);         //所以输出的是默认值100,不是99

    delete obj.x;               //默认configurable=false不可配置

    console.log(obj.x);         //所以x没有被删掉,仍然输出默认值100

    //如果要在obj对象上设置x,覆盖原型链上的x值,必须将writable和configurable设置为true

    Object.defineProperty(obj,'x',{

    value: 10,

    writable: true,

    configurable: true

    });

    console.log(obj.x);  //输出10

    obj.x = 9;           //更改对象上的x

    console.log(obj.x);  //输出9

    delete obj.x;        //删除掉对象上的x,只剩原型链上的x

    console.log(obj.x);  //所以输出100

    </script>


    查看全部
  • <script type="text/javascript">

    function foo(){}; //创建一个空函数foo(),foo原型上有prototype对象

    //通过 defineProperty,在prototype对象上创建一个z属性,再给z添加get方法,返回值为 1

    Object.defineProperty(foo.prototype,'z',{    

    get:function(){

    return 1;

    }); 

    var obj = new foo(); //以foo为原型创建对象obj

    console.log(obj.z);  //输出1,z在原型链foo.prototype上

    obj.z = 100;         //仍然输出1,因为原型链foo.prototype上的z有get()或set()方法,

    console.log(obj.z);  //所以不能在obj对象上创建z属性,所以输出的仍是原型链上z的值1       

    delete obj.z;        //不能删除原型链上的z

    console.log(obj.z);  //所以输出的仍是1

    //如果要在obj对象上创建z属性,需要设置configurable为true,其他没有设置的属性默认为false

    Object.defineProperty(obj,'z',{

    value: 100,

    writable: false,      //不可写的

    configurable: true   //可配置的

    });

    console.log(obj.z);  //输出默认值100

    obj.z = 99;          //上面设置writable为false,表示z的属性值不可改写

    console.log(obj.z);  //所以不会输出99,仍是100

    delete obj.z;        //上面设置了可配置属性,所以能删除

    console.log(obj.z);  //删除obj对象上的z后,输出的是原型链上的z值1

    </script>


    查看全部
  • get、set与原型链

    https://img1.sycdn.imooc.com//5ac3385200011fef13310901.jpg

    查看全部
  • https://img1.sycdn.imooc.com//5ac32ad0000169ca11460892.jpg

    查看全部
  • 开始
    查看全部
  • java中级
    查看全部

举报

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

微信扫码,参与3人拼团

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

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