JavaScript对象的理解 及 字面量对象与数组的关系
JavaScript的简单类型包括 数字、字符串、布尔值、null值、undefined值。
其他的值都是对象。对象是可变的键控集合。数组、函数、正则表达式都是对象。
对象是属性的容器,属性都是名字和值对。名字可以是包括空字符串在内的全部字符串。值可以是除了undefined之外的任何值。
JavaScript中的对象是无类别(class-free)的。
JavaScript包括一个原型链特性,允许对象继承另一个对象的属性。正确的使用能减少对象初始化的时间和内存损耗。
对象字面量:
var empty_object = {}; var stoog = {
"first-name" : "Jerry",
second_name : "howead"
};
注意:
1.如果属性名称合法并且不是保留字,那么名字的 引号 可以不写。也就是说,是“保留字”的时候,“属性名称”一定要打引号,否则IE浏览器下报错;
2.另外,对象的最后一个属性值后面是不要逗号“,”的,不然,IE浏览器又会报错,切记!!!
检索:
1、stoog["first-name"]
2、stoog.second_name
如果尝试返回一个不存在的元素的值,那么将返回一个undefined值。
||可以用来填充默认值
如:var middle = stoog["first-name"]||"(none)";
检索undefined值将会导致TypeError异常,可以使用&&来避免错误
flight.equipment && flight.equipment.model //undefined.
引用 reference
对象通过引用来传递,他们永远不会被拷贝
原型 Prototype
当用Prototype编写一个类后,当new一个新的object,浏览器会自动把prototype中的内容附加在object上。
反射 Reflection
typeof flight.number //'number' 该方法会检查原型链。
flight.hasOwnProperty('number') //true .该方法不会检查原型链
枚举 Enumeration
for in 可以用来遍历一个对象中所有的属性名。会列出所有的属性,包括函数和可能不关心的原型中的属性。并且不按照顺序取得。
所以可以用 typeof 或者hasOwnProperty来过滤不需要的值。
所以通常使用for而不是for in,可以得到我们想要的属性,而不会得到原型链中的属性,并且可以按顺序取得。
删除 delete
它会删除对象中包含的属性,但是不触及原型链中的任何对象。所以删除对象的属性可能会让原型链中的属性浮现出来。
减少全局变量污染 Global Abatement
最小化使用全部变量的一个方法是在应用中只创建唯一一个全局变量,然后让该变量称为你的应用的容器。
闭包也是一个有效减少全局污染的方法。
JavaScript 字面量对象 与 数组 混用
1、数组的创建
1.1 采用“数组字面量”
JS的数组是无类型的,里边可以存放任何类型的数据,如:
var aValues=["string", 24, true, null];
这里定义了一个数组字面量,可用如下方式访问:
alert(aValues[0]); //输出字串”string”
alert(aValues[1]); //输出数字24
alert(aValues[2]); //输出布尔值true
alert(aValues[3]); //输出null。
1.2、 如果不想用字面量表示法定义数组,也可以用Array的构造函数。如:
var aValues = new Array("string", 24, true, null);
2、对象的创建
2.1、用对象字面量,如:
var oCar = {
"color": "red",
"doors": 4,
"paidfor": true
}
这里创建了一个对象,内有三个属性,可用如“.”号的方式访问对象的属性:
alert(oCar.color); //输出”red”
alert(oCar.door); //输出”4”
alert(oCar.paidfor); //输出”true”
也可用“[“属性”]”的方式得到属性值,如下:
alert(oCar["color"]); //输出字串”red”
alert(oCar["door"]); //输出字串”4”
alert(oCar["paidfor"]); //输出字串”true”
2.2、同样,也可使用JS的object构造函数来创建一个对象。如下:
var oCar = new object();
oCar.color = "red";
oCar.doors = 4;
oCar.paidfor = true;
2、数组和对象的混合
这里只能使用混合字面量,来创建“对象数组”或“包含数组的对象”。如下:
var oCars = [
{
"color": "red",
"doors": 2,
"paidfor": true },
{
"color": "blue",
"doors": 4,
"paidfor": true
},
{
"color": "white",
"doors": 2,
"paidfor": false
}
];
这就是一个对象数组,里面包含了三个对象,访问时形如这样:
alert(oCars[1].color); //输出“blue”
如下是一个包含数组的对象:
oCarInfo = {
"availableColors": ["red", "blue", "white"],
"availableDoors": [2, 4]
};
访问时形如:
alert(oCarsInfo.availableColor[1]); // 输出“blue”
JavaScript对象的理解 及 字面量对象与数组的关系的更多相关文章
- Javascript的字面量对象以及如何拆解字面量对象
简单的说,字面量对象提供了一直非常方便构建新对象的方式,它的格式非常简单且容易阅读.是大多数前端程序员在构建对象时比较推崇的一种方式. 格式: var person = { name : " ...
- JSON运用——PHP中使用json数据格式定义字面量对象的方法
目前,在PHP中是不支持字面量命名法. 前端的小伙伴都知道,在JS中用字面量定义一个对象的方法可以如下: var o = { 'name' : 'Tom' , 'url' : 'www.baidu.c ...
- JS对象、基本类型和字面量的区别
字面值: var str1='this is a simple string'; var num1=1.45; var answer1=true; 基本类型: var str2=String('thi ...
- ES6 - 对象扩展(增强字面量)
/** * 对象的扩展 * * 增强对象字面量 * * 解决问题:缩减代码 */ { /** * 1.属性简表示法 * 变量foo直接写在大括号里面.这时,属性名就是变量名, 属性值就是变量值 */ ...
- char型指针和字符串字面量和字符数组
1.当一个char型指针指向一个字符串字面量(也就是常量字符串)时,该指针必须由const修饰,否则,系统会给出deprecated(不赞成)的警告.原因是:字符串字面量不可改变,当它被一个非cons ...
- javascript 字面量 和变量 之间的关系
https://www.w3cschool.cn/javascript/js-syntax.html
- JavaScript对象字面量
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
var proto = ""; function Person(name, age, job) { this.name = name; this.age = age; this.j ...
- Java常量,变量,对象(字面量)在JVM内存中的存储位置
Java常量,变量,对象(字面量)在JVM内存中的存储位置 2019-02-26 18:13:09 HD243608836 阅读数 540 收藏 更多 分类专栏: JAVA jvm 苦苦研究了快 ...
随机推荐
- Mirantis OpenStack 8.0 版本大概性分析
作为 OpenStack 领域标杆性企业之一的 Mirantis 在2016年3月初发布了最新的 MOS 8.0 版本.本文试着基于公开资料进行一些归纳分析. 1. 版本概况 1.1 概况 社区版本: ...
- AutoCAD2006的安装及CASS7.1的配置破解
-----本文只限于学习交流,商业用途请支持正版! -----转载请注明:http://www.cnblogs.com/mxbs/p/6193190.html 准备: AutoCAD2006.CASS ...
- struts之类型转换
Struts2的内置类型转换器: Struts2的内置类型转换器,可以为你处理大多数的类型转换,这包括了以下类型和String类型之间的转换! 1.String 将int,double,boolean ...
- Linux提权(2)-高级版
当你在攻击受害者的电脑时即使你拥有了一个shell,依然可能会有一些拒绝执行指令的限制.为了获得目标主机的完整控制权限,你需要在未授权的地方绕过权限控制.这些权限可以删除文件,浏览私人信息,或者安装并 ...
- jmeter(五)Sample之JDBC Request
jmeter中取样器(Sampler)是与服务器进行交互的单元.一个取样器通常进行三部分的工作:向服务器发送请求,记录服务器的响应数据和记录相应时间信息 有时候工作中我们需要对数据库发起请求或者对数据 ...
- 【笔记5】用pandas实现矩阵数据格式的推荐算法 (基于物品的协同)
''' 基于物品的协同推荐 矩阵数据 说明: 1.修正的余弦相似度是一种基于模型的协同过滤算法.我们前面提过,这种算法的优势之 一是扩展性好,对于大数据量而言,运算速度快.占用内存少. 2.用户的评价 ...
- jQuery基础课程
环境搭建 搭建一个jQuery的开发环境非常方便,可以通过下列几个步骤进行. 下载jQuery文件库 在jQuery的官方网站(http://jquery.com)中,下载最新版本的jQuery文件库 ...
- NPOI操作EXCEL(一)——npoi基础
去年项目有一个子模块需要解析上百张不一样的excel表格入库,当时用的NPOI,做了很久...也尝试想把代码分享到oschina,结果没坚持两篇就放弃了. 赶巧的是,昨天运营那边提出要录入一些基础数据 ...
- 跟我从零基础学习Unity3D开发--NGUI入门基础
英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...
- Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发
Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧, ...