细说JavaScript对象(1):对象的使用和属性
JavaScript 中的一切都可以视为对象,除了两个特例:null 和 undefined。
false.toString(); // 'false'
[1, 2, 3].toString(); // '1,2,3'function Foo(){}
Foo.bar = 1;
Foo.bar; // 1
一个经常容易被误解的就是数字常量不能视为对象,实际上数字常量仍然可以视为对象。这是因为 JavaScript 解析器在解析点操作符时而将其视为浮点数特征而犯下的错误。
2.toString(); // raises SyntaxError
实际上,我们有很多方法可以使得数字常量表现为一个对象。
2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first
对象作为数据类型
JavaScript 中的对象可以当做哈希表使用,它们主要包含键与值的对应关系。
使用 {} 符号来创建一个简单的对象,这个新建的对象将从 Object.prototype 继承而来,并且不包含自己定义的属性。
var foo = {}; // a new empty object// a new object with a 'test' property with value 12
var bar = {test: 12};
访问对象的属性
我们可以使用两种方式来访问 JavaScript 的对象,分别是点操作符 . 和中括号操作符 [] 。
var foo = {name: 'kitten'}
foo.name; // kitten
foo['name']; // kittenvar get = 'name';
foo[get]; // kittenfoo.1234; // SyntaxError
foo['1234']; // works
两种操作符的效果几乎一样,唯一的不同是中括号操作符允许动态设置属性而且属性名可能有语法错误。(上例中的第三个情形已说明)
删除对象的属性
删除属性的唯一方法是使用 delete,将属性值设置为 undefined 或 null 只是移除了与属性相关的值,并没有真正删除属性本身。
var obj = {bar : 1,foo : 2,baz : 3
};
obj.bar = undefined;
obj.foo = null;
delete obj.baz;for (var i in obj) {if (obj.hasOwnProperty(i)) {console.log(i, '' + obj[i]);}
}
上面的输出 bar undefined 和 foo null,只有 baz 真正被删除。
这里要说明一点,delete 只能删除属性,并不能删除变量。所以我们在定义变量时一定要养成写 var 的好习惯,任何时候,变量一定要使用 var 关键字才能声明。因为如果不写 var,变量会被误认给全局对象创建了一个新属性。
这个例子相当清楚给出了答案,a 为变量,而 b 只是一个全局对象的属性而已。
命名对象的属性
var test = {'case' : 'I am a keyword, so I must be notated as a string',delete : 'I am a keyword, so me too' // raises SyntaxError };
对象的属性可以用普通字符或字符串来命名。同样也是由于 JavaScript 解析器的一个错误设计,上例中的第二种表示方法在 ECMAScript 5 中将会抛出一个错误。
错误的原因是因为 delete 是一个关键词,所以必须使用一个字符串常量来命名来适应老版的 JavaScript 解析器。
参考:
http://segmentfault.com/blog/stephenlee/1190000000477429
http://bonsaiden.github.io/JavaScript-Garden/#object.general
延伸阅读:
细说JavaScript对象(1):对象的使用和属性
细说JavaScript对象(2):原型对象
细说JavaScript对象(3):hasOwnProperty
细说JavaScript对象(4): for in 循环
细说JavaScript对象(1):对象的使用和属性相关推荐
- 细说JavaScript对象(2):原型对象
JavaScript 并没有类继承模型,而是使用原型对象 prototype 进行原型式继承. 尽管人们经常将此看做是 JavaScript 的一个缺点,然而事实上,原型式继承比传统的类继承模型要更加 ...
- 细说JavaScript中对象的属性和方法
最近在回家的路上读了尼古拉斯的新书<JavaScript面向对象精要>,发现自己对对象的属性和方法不是很熟悉,特别是es5新增的部分,特写此文总结一下,同时也与大家共勉. 本文分为两部分, ...
- 创建健壮的isArray()函数(JavaScript中判断对象类型的种种方法)
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
- JavaScript强化教程——对象的值传递和引用传递
2019独角兽企业重金招聘Python工程师标准>>> 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程--对象的值传递和引用传递 func ...
- 第一百一十四节,JavaScript文档对象,DOM进阶
JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元 ...
- 在JavaScript中删除对象
本文翻译自:Deleting Objects in JavaScript I'm a bit confused with JavaScript's delete operator. 我对JavaScr ...
- 如何在Javascript中访问对象的第一个属性?
本文翻译自:How to access the first property of an object in Javascript? Is there an elegant way to access ...
- 检查值是否是JavaScript中的对象
如何检查值是否是JavaScript中的Object? #1楼 尝试这个 if (objectName instanceof Object == false) {alert('Not an objec ...
- JavaScript学习笔记——对象知识点
javascript对象的遍历.内存分布和封装特性 一.javascript对象遍历 1.javascript属性访问 对象.属性 对象[属性] //字符串格式 //javascript属性的访问方法 ...
最新文章
- 机械转行的都干啥去了?机械转行计算机难吗?
- 旷世科技算法实习面经
- 2017年前端面试题整理汇总100题
- 宣传推广费用_企业如何做好网络推广,提高网络推广的转化率?
- 代码: html 页面小效果 (集合,待补充)
- 干货整理!深度学习相关的面试考点
- 初等数论--整除--欧几里得算法/辗转相除法/更相减损术
- Introspection in Python How to spy on your Python objects Guide to Python introspection
- nginx php如何无响应,nginx,_nginx 可以直接响应服务静态页面吗, 为何配置了很久都不成功?,nginx - phpStudy...
- subList?? subString???
- java this关键字表示当前对象,可以访问属性、方法、构造方法
- djanjo 使用a标签跳转_djangoGETPOST用法以及点击a标签和form表单跳转的类型取参等...
- lxml库的一些注意事项
- 51单片机--时钟芯片ds1302
- 三角形边长求高的c语言函数公式,三角形边长计算公式
- 我本可以忍受黑暗,如果我不曾见过太阳。
- PLG SaaS 产品 Figma 商业模式拆解
- Java使用当前日期加四位数实现每日自增单号工具类
- Unity使用UIWebView导致iOS审核被拒的解决方案
- oss调整图片大小宽高
热门文章
- C#中typeof 与GetType()的区别和methodinfo、memberinfo反射
- webstorm激活+汉化教程
- 20162317 2017-2018-1 《程序设计与数据结构》第8周学习总结
- Light OJ 1007
- [置顶] Android开发者官方网站文档 - 国内踏得网镜像
- (转)SystemProcessesAndThreadsInformation
- 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transformations
- AE 模板 天使之城
- python基础1 第一天
- visual studio code搭建本地服务器(node.js+express)