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 10:配置获取隐私数据权限声明
原文链接 iOS 10的一大变化是更强的隐私数据保护.在文档中是这么描述的: You must statically declare your app’s intended use of protec ...
- UbuntuLinux安装Mysql
1.安装Mysql5.7 方法:手动安装5.7 One: $ wget http://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.deb 下载 ...
- NYOJ题目916胖子小的百宝袋
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsQAAAL6CAIAAAC+R9cJAAAgAElEQVR4nOydO5LcvM6GzyYmn4U47o
- 4.2 set和multiset
使用必须包含头文件set 1)multiset *:定义 如果不给第二个参数,默认less<key>,即用<来进行. 例如: A是一个类的名字,则可以定义一个容器对象如下: mult ...
- struts2 javaweb 过滤器、监听器 拦截器 原理
转: 过滤器.监听器 拦截器 过滤器 创建一个 Filter 只需两个步骤: (1)创建 Filter 处理类: (2)在 web.xml 文件中配置 Filter . 创建 Filter 必须实现 ...
- CLR via C#(17)--接口
CLR不允许继承多个基类,但是可以继承多个接口.凡是能使用具名接口类型的实例的地方,都能使用实现了接口的一个类型的实例. 接口是对一组方法签名进行了统一命名,但不提供任何实现,而具体类则必须为继承的全 ...
- 设计模式学习之备忘录模式(Memento,行为型模式)(19)
假如我们已经记录一个人的个人信息,但是发现信息写错了,然后我先备份下再去修改,结果发现原来的信息是正确的,于是我就看备份的个人信息还原到初始的状态,下面我们用代码去实现 class Program { ...
- 使用Asyncio的Coroutine来实现一个有限状态机
如图: #!/usr/bin/env python # -*- coding: utf-8 -*- import asyncio import datetime import time from ra ...
- ytu 1058: 三角形面积(带参的宏 练习)
1058: 三角形面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 190 Solved: 128[Submit][Status][Web Boar ...
- Linux/centos下安装riak
必备的组件: gccgcc-c++glibc-develmakepam-devel 使用yum安装相关组件 sudo yum install gcc gcc-c++ glibc-devel make ...