对象中包含一系列属性,这些属性是无序的。每个属性都有一个字符串key和对应的value。
var obj = {}; obj[1] = 1; obj['1'] = 2; obj;//Object{1:2} obj[{}] = true; obj[{x:1}] = true; obj;//Object{1:2,[object Object]:true}
一.创建对象
1.字面量
var obj1 = {x:1,y:2}; var obj2 = { x:1, y:2, o: { z:3, n:4 } };
2.new/原型链
function foo() {} foo.prototype.z = 3; var obj = new foo(); obj.y=2; obj.x=1; obj.x;//1 obj.y;//2 obj.z;//3 typeof obj.toString;//'function' 'z' in obj;//true obj.hasOwnProperty('z');//false obj.z = 5; obj.hasOwnProperty('z');//true foo.prototype.z;//still 3 obj.z;//5 obj.z = undefined; obj.z;//undefined delete obj.z;//true obj.z;//3
3.Object.create
var obj = Object.create({x:1}); obj.x;//1 typeof obj.toString;//"function" obj.hasOwnProperty('x');//false var obj = Object.create(null); obj.toString;//undefined
二.属性操作
1.读写对象属性
var obj = {x:1,y:2}; obj.x;//1 obj["y"];//2 var obj = {x1:1,x2:2}; var i=1,n=2; for(;i<=n;i++) { console.log(obj['x'+i]); } //输出:1,2 var p; for(p in obj) { console.log(obj[p]); }
2.属性读写-异常
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;
3.删除属性
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');//获得Object对象的prototype属性描述器 descriptor.configurable;//false
var定义的全局变量或局部变量,不能被删除。
var globalVal = 1; delete globalVar;//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
4.检测属性
var cat = new Object; cat.legs = 4; cat.name = "Kitty"; 'legs' in cat;//true 'abc' in cat;//false "toString" in cat;//true,inherited property!!! cat.hasOwnProperty('legs');//true cat.hasOwnProperty('toString');//false cat.propertyIsEnumerable('legs');//true cat.propertyIsEnumerable('toString');//false自定义属性,可以让其枚举为false,可用Object.defineProperty
//自定义属性,可以让其枚举为false Object.defineProperty(cat, 'price', {enumerable:false, value:1000}); cat.propertyIsEnumerable('price');//false cat.hasOwnProperty('price');//true if(cat && cat.legs) { cat.legs *= 2; } if(cat.legs != undefined) { //!==undefined or !== null } if(cat.legs !== undefined) { //only if cat.legs is not undefined }
5.枚举属性
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 } var obj = Object.create(o); obj.a = 4; var key; for(key in obj) { console.log(key);//a,x,y,z } var obj = Object.create(o); obj.a = 4; var key; for(key in obj) { if(obj.hasOwnProperty(key)) { console.log(key);//a } }
三.get/set方法
var man = { name:'Bosn', weibo:'@Bosn', get age() { return new Date().getFullYear()-1988; }, set age(val) { console.log('Age can\'t be set to '+val); } } console.log(man.age);//27 man.age = 100;//Age can't be set to 100 console.log(man.age);//still 27
var man = { weibo:'@Bosn', $age:null, get age() { if(this.$age == undefined) { return new Date().getFullYear() - 1988; }else { return this.$age; } }, set age(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 = NaNget/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 Object.defineProperty(obj, 'z', {value:100, configurable:true}); obj.z;//100 delete obj.z; obj.z;//back to 1
var 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 Object.defineProperty(obj, 'x', {writable:true, configurable:true, value:100}); obj.x;//100 obj.x = 500; obj.x;//500
四.属性标签
//Object.getOwnPropertyDescriptor方法第一个参数是要判断的对象,第二个参数是要判断的属性名 Object.getOwnPropertyDescriptor({pro:true}, 'pro'); //Object {value:true, writable:true, enumerable:true,configurable:true} Object.getOwnPropertyDescriptor({pro:true}, 'a');//undefined var person = {}; Object.defineProperty(person, 'name', { configurable:false, writable:false, enumerable:true, value:"Bosn Ma" }); person.name;//Bosn Ma person.name = 1; person.name;//still Bosn Ma delete person.name;//false Object.defineProperty(person, 'type', { configurable: true, writable:true, enumerable:false, value:"Object" }); Object.keys(person);//["name"],因为type属性的enumerable为false
相关推荐
"深入浅出JavaScript"这本书显然旨在帮助读者全面理解这种强大的编程语言,包括其核心概念、语法以及实际应用。 JavaScript的基础部分涵盖变量、数据类型、控制流(如条件语句和循环)、函数等。变量是存储数据的...
JavaScript是一种广泛应用...以上就是JavaScript学习笔记中的主要知识点,理解和掌握这些内容对于深入学习JavaScript至关重要。在实际编程中,还需要结合具体的场景灵活运用,并不断实践和探索更高级的特性和最佳实践。
《李炎恢Javascript笔记》是一本深入浅出的JavaScript学习资料,它涵盖了JavaScript的基础到实践应用的诸多方面。这本书的特点是将复杂的编程概念分解为易于理解的小知识点,并且提供了源码示例,使得读者能够更好地...
【标题】:“大佬的前端学习笔记”是一份深入浅出的前端开发资源,包含了Web开发中的核心语言和技术,如Node.js、JavaScript、Axios、jQuery和HTML。这份笔记旨在帮助开发者提升前端技能,掌握现代Web开发的最佳实践...
本文是学习笔记系列的第二篇,深入浅出的分别从javascript对象和数组两个部分介绍了相关知识,并附上详细示例,非常的实用,有需要的朋友可以参考下
张孝祥是一位知名的编程教育者,他的JavaScript教程以其深入浅出的讲解方式深受广大程序员喜爱。他的笔记涵盖了JavaScript的核心概念、语法、数据类型、控制结构、函数、对象、数组、字符串、正则表达式、DOM操作、...
这本书深入浅出地介绍了JavaScript的基础知识,帮助读者掌握这门强大的脚本语言。JavaScript是一种广泛应用于Web开发的编程语言,它在网页交互、动态效果以及前后端数据交换等方面发挥着重要作用。 本书涵盖了1-15...
圣思源张龙老师的jQuery学习笔记,深入浅出地剖析了这个库的核心概念和实用技巧,对于想要深入理解jQuery或提升前端技能的开发者来说,无疑是一份宝贵的学习资源。 首先,jQuery的核心理念是"Write Less, Do More...
林信良的学习笔记《AjaxGossip》深入浅出地介绍了Ajax的核心概念和技术细节,对于初学者来说是一份非常实用的教程。 **Ajax基础** 1. **XMLHttpRequest对象**:Ajax的核心是XMLHttpRequest对象,它允许JavaScript...
韩顺平老师是一位知名的Java和Web开发领域的讲师,他的课程通常深入浅出,易于理解,对于初学者尤其有帮助。 **JSP的基本结构**: JSP文件是一个包含HTML标记和JSP元素的文本文件。JSP元素主要有指令(Directives)...
"韩顺平html+css+javascript笔记"是一套全面的前端学习资料,韩顺平是一位知名的编程教育专家,他的讲解通常深入浅出,适合初学者。笔记中可能涵盖了HTML的基本结构和语义化,CSS的选择器、布局和动画,以及...
《JavaScript忍者秘籍(第2版)》是JavaScript编程领域的一本经典之作,它深入浅出地介绍了JavaScript的核心概念和技术。这本书不仅包含了基础语法,还涵盖了高级特性,旨在帮助读者成为JavaScript的高手,即“忍者...
本教程由北风网知名讲师CJ主讲,旨在深入浅出地讲解这三门技术,帮助学习者掌握现代Web开发的核心技能。 首先,JavaScript 是一种轻量级的解释型编程语言,主要用于客户端的网页开发。它赋予了网页动态性,允许...
在《锋利的jQuery》一书中,作者深入浅出地介绍了jQuery的核心概念和用法。 1. jQuery 对象与 DOM 对象 - DOM 对象是浏览器解析HTML文档后生成的一棵树状结构,代表了网页的结构。DOM对象可以是元素节点、文本节点...
韩顺平老师的2023年JavaScript课堂实录笔记深入浅出地介绍了JS的核心概念和应用。 首先,JavaScript在网页中的应用非常广泛,包括地图搜索、网页游戏、用户输入验证(如邮箱、数字、身份证、IP地址等)、股市数据...
韩顺平老师是业界知名的IT教育专家,他的教程以其深入浅出的讲解方式深受广大程序员喜爱。这份笔记集合了他的教学经验,旨在帮助学习者更好地理解和掌握这些关键的技术。 1. **Java**: Java是一种广泛应用的面向...
这份笔记通过深入浅出的方式,系统地讲解了JavaScript从基础到高级的各个方面,无论你是初学者还是有经验的开发者,都能从中受益。通过阅读和实践,你将能够掌握JavaScript的核心技术和最佳实践,为在Web开发领域...
JavaScript,简称为JS,是一种广泛应用于Web开发的轻量级脚本语言。...在网页设计中,JavaScript扮演着至关重要的角色,因为它允许开发者...韩顺平老师的课程提供了深入浅出的讲解,对于初学者来说是一份很好的学习资源。
【Java Web 全面解析】 ...本笔记深入浅出地介绍了Java Web开发的核心技术,通过学习这些知识点,开发者可以构建功能丰富的动态网站,并为进一步学习Spring、Hibernate、MyBatis等高级框架打下坚实基础。