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

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
493人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 对象标签 [[proto]] [[class]] [[extensible]]
    查看全部
  • class标签 Class标签不能直接修改,可通过下面方式: var toString = Object.prototype.toString; function getType(o){return toString.call(o).slice(8,-1);}; // 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" getType(true); // "Boolean" getType(new Boolean(true)); // "Boolean"
    查看全部
  • 属性标签configurable和
writable
    查看全部
  • 属性标签例子: Object.defineProperties(person, { title : {value : 'fe', enumerable : true}, corp : {value : 'BABA', enumerable : true}, salary : {value : 50000, enumerable : true, writable : true}, luck : { get : function() { return Math.random() > 0.5 ? 'good' : 'bad'; } }, promote : { set : function (level) {//level接收person.promote = 2;等号右边的值 this.salary *= 1 + level * 0.1; } } }); Object.getOwnPropertyDescriptor(person, 'salary'); // Object {value: 50000, writable: true, enumerable: true, configurable: false} Object.getOwnPropertyDescriptor(person, 'corp'); // Object {value: "BABA", writable: false, enumerable: true, configurable: false} person.salary; // 50000 person.promote = 2; person.salary; // 60000
    查看全部
  • 访问对象的属性必须有两各方法 ,一种是直接通过.号来访问, 另一种是通过数组的方法 来访问 ,但是它的中括号中必须是字符串
    查看全部
  • get/set与原型链 var o = {};//定义空对象o Object.defineProperty(o, 'x', {value : 1}); // writable=false, configurable=false var obj = Object.create(o); obj.x; // 1 obj.x = 200; obj.x; // still 1, can't change it 当前对象上没有此属性,原型链上有,但是writable=false,需要如下定义覆盖原型链上的原有属性值 Object.defineProperty(obj, 'x', {writable:true, configurable:true, value : 100}); obj.x; // 100 obj.x = 500; obj.x; // 500
    查看全部
  • 原始数据类型:number boolean string null undefined
    查看全部
  • var man = { weibo : '@Bosn', $age : null, //$age代表仅此对象能访问 get age() { if (this.$age == undefined) { return new Date().getFullYear() - 1988; } else { return this.$age; } }, set age(val) { val = +val;//val是数字什么都不做,字符串转换为数字 if (!isNaN(val) && val > 0 && val < 150) { this.$age = +val; } else { throw new Error('Incorrect val = ' + val); } } } 运行结果: console.log(man.age); // 27 man.age = 100; console.log(man.age); // 100; man.age = 'abc'; // error:Incorrect val = NaN
    查看全部
  • 1、原型链上toString不可以枚举,只输出x,y,z var o = {x : 1, y : 2, z : 3}; 'toString' in o; // true o.propertyIsEnumerable('toString'); // false var key; for (key in o) { console.log(key); // x, y, z } 2、create创建对象默认可枚举, obj原型指向o, 输出obj对象上的a,原型链上x,y,z var obj = Object.create(o); obj.a = 4; var key; for (key in obj) { console.log(key); // a, x, y, z } 3、相比2、增加obj.hasOwnProperty(key) 判断,值输出obj对象上的a var obj = Object.create(o); obj.a = 4; var key; for (key in obj) { if (obj.hasOwnProperty(key)) { console.log(key); // a } }
    查看全部
  • Object.defineProperty(cat, ‘price’, {enumerable : false, value : 1000});//参数为:属性对象,属性名字,对象;对象里可以设置标签,默认时enumerable : false,writable=false, configurable=false 注意:用字面量、new创建的对象enumerable:true cat.propertyIsEnumerable('price'); // false cat.hasOwnProperty('price'); // true if (cat && cat.legs) { cat.legs *= 2; } if (cat.legs !== undefined) { // only if cat.legs is not undefined }
    查看全部
  • 作用域:全局、函数、eval JavaScript只有上面三种作用域,没有块级作用域。
    查看全部
  • 属性检测 var cat = new Object; cat.legs = 4; cat.name = "Kitty"; 1、In沿着原型链向上查找 'legs' in cat; // true 'abc' in cat; // false “toString” in cat; // true, inherited property!!! 2、在对象上查找属性 cat.hasOwnProperty('legs'); // true cat.hasOwnProperty('toString'); // false 3、对象是否能被枚举 cat.propertyIsEnumerable('legs'); // true cat.propertyIsEnumerable('toString'); // false
    查看全部
  • 属性删除 var globalVal = 1; delete globalVal; // false (function() { var localVal = 1; return delete localVal; }()); // false function fd() {} delete fd; // false (function() { function fd() {}; return delete fd; }()); // false 如下不推荐 ohNo = 1; window.ohNo; // 1 delete ohNo; // true
    查看全部
  • var person = {age : 28, title : 'fe'}; delete person.age; // true delete person['title']; // true person.age; // undefined delete person.age; // true,仅表示这个对象上已经不存在这个属性了 delete Object.prototype; // false, var descriptor = Object.getOwnPropertyDescriptor(Object, 'prototype'); descriptor.configurable; // false
    查看全部
  • 属性读写-异常 var obj = {x : 1}; obj.y; // undefined var yz = obj.y.z; // TypeError: Cannot read property 'z' of undefined obj.y.z = 2; // TypeError: Cannot set property 'z' of undefined var yz; if (obj.y) { yz = obj.y.z; } 等价于下面 var yz = obj && obj.y && obj.y.z;
    查看全部

举报

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

微信扫码,参与3人拼团

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

友情提示:

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