一.对象

除了字符串、数字、true、false、null和undefined之外,javascript中的值都是对象.

javascript对象属性包括名字和值,属性名可以是包含空字符串在内的任意字符串,但对象中不能存在两个同名的属性.

属性名可以是javascript标示符也可以是字符串直接量,属性名字里用空格或者连字符"-",必须要用字符串表示.

三类javascript对象和两类属性:

  • 内置对象(native object)是有ECMAScript规范定义的对象种类.例如,数组、函数、日期和正则表达式都是内置对象。
  • 宿主对象(host object)是由javascript解释器所嵌入的宿主环境(比如Web浏览器)定义的.客户端javascript中表示网页结构的HTMLElement对象均是宿主对象.既然宿主环境定义的方法可以当成普通的javascript函数对象,那么宿主对象也可以当成内置对象.
  • 自定义对象(user-defined object)是有运行中的javascript代码创建的对象
  • 自有属性(own property)是直接在对象中定义的属性.
  • 继承属性(inherited property)是在对象的原型对象中定义的属性.

原型:Object.prototype获得对原型对象的引用;例如通过new Date创建的对象的原型就是Date.prototype.(例如对Date的扩展:Date.prototype.format = function(a){...})

/**
 *@Title:扩展JS内部对象的功能方法!使用prototype原型方法
 *@Author:铁木箱子
 *@Date:2006-10-17
 */

二.属性的查询和设置

可以通过点(.)或方括号([])运算符来获取属性的值.对于点(.)来说,右侧必须是一个属性名称命名的简单标示符.对于方括号([])来说,方括号内必须是一个计算结果为字符串的表达式,这个字符串就是属性的名字:

var author = book.author;

var name = author.surname;

var title = book["main title"];

和查询属性的写法一样,通过点和方括号也可以创建属性或给属性复制,但需要将他们放在表达式的左侧:

book.edition = 6;

book["main title"] = "ECMAScript";

三.作为关联数组的对象

javascript对象都是关联数组,也称作散列、映射或者字典

有很多场景智能使用数组写法来完成,比如说在写程序的时候不知道属性名称,属性名称是动态的,因此无法通过点运算符来访问对象属性。但可以使用[]运算符,因为它使用字符串值(字符串值是动态的可以在运行的时候更改)而不是标示符(标示符是静态的,必须写死在程序里)作为索引堆属性进行访问.object[变量]是对的,但是object.变量是错误的.

四.检测属性

javascript对象可以看做属性的集合,我们经常会检测集合中成员的所属关系——判断摸个属性是否在某个对象中。可以通过in运算符、hasOwnPreperty()和propertyIsEnumerable()方法来完成这个工作,甚至仅通过属性查询也可以做到这一点.

var o = {x:1}

"x" in o;   //true: "x"是o的属性

"y" in o;   //false: "y"不是o的属性

"toString" in o;   //true: o继承toString属性

对象的hasOwnProperty()方法用来检测给定的名字是否是对象的自由属性.对于继承属性它将返回false:

var o = {x:1}

o.hasOwnProperty("x");   //true: "x"是o的属性

o.hasOwnProperty("y");   //false: "y"不是o的属性

o.hasOwnProperty("toString");   //toString是继承的属性

propertyIsEmumerable()是hasOwnProperty()的增强版,是有检测到是自有属性且这个属性的可枚举性为true时它才返回true.

除了使用in运算符之外,另一种更简单的方法是使用"!=="判断一个属性是否是undefined:

var o = {x:1}

o.x !== undefined;  //true: "x"是o的属性

o.y !== undefined;  //false: "y"不是o的属性

o.toString !== undefined;   //true: o继承了toString属性

然而有一种场景只能使用in运算符而不能使用上述属性访问的方式.in可以区分不存在的属性和存在的但是值为undefined的属性.

五.枚举属性

var o = {x:1,y:2,z:3}

o.propertyIsEnumerable("toString");

for(p in o){

  cosole.log(o[p])

}

js 对象(Object)的更多相关文章

  1. js 对象(object)合并

    var obj1 = { name:'lisi', checked:'true' }; var obj2 = { name:'zhangsan', age:18 }; Object.assign(ob ...

  2. JS 对象(Object)和字符串(String)互转方法

    利用原生JSON对象,将对象转为字符串 1 2 3 4 5 6 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; ...

  3. 理清JS数组、json、js对象的区别与联系

    最近在敲代码时,遇上了一个关于JS数组的问题,由此引发了关于对象和json的联想,曾经觉得很畅顺的知识点突然模糊了.于是,为了理清这些东西,有了如下这篇文章.觉得没问题的猿们可以当复习,而那些带着疑问 ...

  4. JSON(JavaScript Object Notation, JS 对象标记)

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...

  5. JS json对象(Object)和字符串(String)互转方法

    [JS json对象(Object)和字符串(String)互转方法] 参考:https://blog.csdn.net/wenqianla2550/article/details/78232706 ...

  6. 原生JS:Object对象详细参考

    Object对象详细参考 本文参考MDN做的详细整理,方便大家参考MDN JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象. 构造函数: Objec ...

  7. js内置对象-Object

    1)Object构造函数的方法 返回指定对象的原型对象 Object.getPrototypeOf(mymap); /*{featureStyle: {…}, selfLayersCount: nul ...

  8. JS对象继承篇

    JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...

  9. JS的Object漫想:从现象到“本质”

    转自:http://zzy603.iteye.com/blog/973649 写的挺好,用于记录,把对象分成概念的Object(var f={})和 类的Object(function F(){}) ...

随机推荐

  1. ios cell展示可滑动的图片

    需求: 点击cell上的图片.图片以原图显示出来,可以放大或缩小.再次点击图片移除图片显示原来界面.(和QQ空间看图片类似) 点击图片实现效果: 1. 自定义一个 UITableView (KDIma ...

  2. [转]DB2类型转换函数

    Src URL:http://www.cnblogs.com/QQParadise/articles/2642677.html

  3. Mex文件在VS2010中调试方法

    http://www.cnblogs.com/lukylu/p/4042306.html matlab里面无法单步调试mex函数,故需转到VS上面调试,这里采用VS2010. 参考网上很多人写的方法但 ...

  4. tengine-2.1.0 源码安装

    [root@localhost tengine-]# yum update -y [root@localhost tengine-]# yum install gcc gcc-c++ autoconf ...

  5. vim: vs sp 调整窗口高度和宽度

    转自:http://www.cnblogs.com/xuechao/archive/2011/03/29/1999292.html vim多窗口有时候需要调整默认的窗口宽度和高度,可以用如下命令配合使 ...

  6. Delphi按下F1不能出现帮助文档的解决方法

    不光是Delphi,Windows里面所有的之所以无法打开.hlp帮助文档的问题都可以使用以下的方法来解决 问题:情况是这样的,不是打不开hlp帮助文档,按F1出现的是Windows的帮助.而Delp ...

  7. android 入门-android Studio git配置

    以后在整理

  8. wp8 入门到精通 虚拟标示符 设备ID

    //获得设备虚拟标示符 wp8 public string GetWindowsLiveAnonymousID() { object anid = new object(); string anony ...

  9. Android之Adapter用法总结-(转)

    Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...

  10. wpf textblock 会覆盖 button里面字体样式的解决方法 还有button的style覆盖。。datepicker里面的按钮的style

    .(button使用contont写的时候) 当.button使用 <button.content><textBlock/></button.content>依然会 ...