js 对象(Object)
一.对象
除了字符串、数字、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)的更多相关文章
- js 对象(object)合并
var obj1 = { name:'lisi', checked:'true' }; var obj2 = { name:'zhangsan', age:18 }; Object.assign(ob ...
- JS 对象(Object)和字符串(String)互转方法
利用原生JSON对象,将对象转为字符串 1 2 3 4 5 6 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; ...
- 理清JS数组、json、js对象的区别与联系
最近在敲代码时,遇上了一个关于JS数组的问题,由此引发了关于对象和json的联想,曾经觉得很畅顺的知识点突然模糊了.于是,为了理清这些东西,有了如下这篇文章.觉得没问题的猿们可以当复习,而那些带着疑问 ...
- JSON(JavaScript Object Notation, JS 对象标记)
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...
- JS json对象(Object)和字符串(String)互转方法
[JS json对象(Object)和字符串(String)互转方法] 参考:https://blog.csdn.net/wenqianla2550/article/details/78232706 ...
- 原生JS:Object对象详细参考
Object对象详细参考 本文参考MDN做的详细整理,方便大家参考MDN JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象. 构造函数: Objec ...
- js内置对象-Object
1)Object构造函数的方法 返回指定对象的原型对象 Object.getPrototypeOf(mymap); /*{featureStyle: {…}, selfLayersCount: nul ...
- JS对象继承篇
JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...
- JS的Object漫想:从现象到“本质”
转自:http://zzy603.iteye.com/blog/973649 写的挺好,用于记录,把对象分成概念的Object(var f={})和 类的Object(function F(){}) ...
随机推荐
- iOS应用架构谈(一):架构设计的方法论
当我们讨论客户端应用架构的时候,我们在讨论什么? 其实市面上大部分应用不外乎就是颠过来倒过去地做以下这些事情: 简单来说就是调API,展示页面,然后跳转到别的地方再调API,再展示页面. 那这有什么好 ...
- sqlplus 设置
set heading offset line 40001.设置页面显示总行数show pagesize; //首先查看目前的pagesize,默认是14set pagesize 100; //将pa ...
- 第三章 C#循环与方法
第一节1-For循环入门 语法: for(条件表达式) { 执行语句 } 练习: 第三章作业1.写一个程序打印100到200的值;2.写一个程序从10打印到1:3.写一个程序打印10到30之间的所有偶 ...
- NYOJ题目1049自增自减
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsYAAAN0CAIAAAA4f3koAAAgAElEQVR4nO3dO3LbyNoG4H8TyrUQx1
- 2 配置Ionic开发环境以及创建新的项目
1.开发环境需要的软件有: node.js http://nodejs.org 可以到官方网站下载对应平台的安装包安装即可,如果已经安装,需要把它升级到最新的稳定版本 在终端可以输入$node ...
- shell学习三十四天----printf详解
http://blog.csdn.net/shanyongxu/article/details/46744055
- JAVA 堆栈知识和Volatile关键字
栈内存:存放基本类型的变量和对象的引用 堆内存:存放用new创建的对象和数组 栈帧:保存了局部变量表,操作数栈,方法的返回地址以及其它的附加信息 volatile修饰的变量,jvm虚拟机只是保证从主内 ...
- git中使用.gitignore文件
在进行协作开发代码管理的过程中,常常会遇到某些临时文件.配置文件.或者生成文件等,这些文件由于不同的开发端会不一样,如果使用git add . 将所有文件纳入git库中,那么会出现频繁的改动和push ...
- Oracle备份 还原命令
1.备份命令 exp username/password file=d:/test/test.dmp; 2.还原命令 imp username/password full=y file=d:/test ...
- C# 使用Trace记录程序日志
在程序开发中,我们通常需要记录程序运行的状态,在程序部署后,发生的异常可以记录在日志中,便于发现程序潜在的问题.在.NET平台,有很多优秀的日志类库,例如Log4Net.如果程序很小,我们可以自己通过 ...