javascript(三):对象
对象(object)是javascript中很重要的数据类型。对象是“键值对”的集合,同时也是无序的。(注意:对象结尾处有分号)
var ob1={
a1:'name',//a1可以加引号或者不加
a2:100,
a3:function test(){}//末尾逗号(,)可加可不加
};
var a1;
console.log(ob1['a1']);
console.log(ob1.a2);
var a2='a2';
console.log(ob1[a2]);//此处a2被当做变量处理
for(var obj in ob1){
console.log(ob1[obj]);//此处obj被当做字符串处理
}
对象的生成方法有三种:三种方法等价!
var ob2={};
var ob2=new Object();
var ob3=Object.create(Object.prototype);
关于对象键名:对象的键名是字符串,加不加引号均行;键名是数值,会自动转化为字符串;键名如果不符合标识名的条件,则需要加上引号!
注意:键名是字符串,但键值是任意形式(比如函数,整数,对象等)
var ob4={
b1:'address',//键名未加引号
'b2':100,//键名加了引号
1e3:'age',//变为'1000'
'02x':[]//02x不符合标识符格式,需要加上引号!
};
对象里面的属性:可以动态添加,亦可动态删除
console.log('I\'m the division line -------------');
var ob5={
name:'Bob'
};
ob5.name1='Alice';
console.log(ob5.name1+" "+ob5.name);
delete ob5.name;
delete ob5.name1;
console.log(ob5.name1+' '+ob5.name);
运行结果:

对象中的“方法”:属性的值是函数,即对象里面的函数,称为“方法”!
var ob6={
name:'cat',
//属性f是一个方法,即对象里面的函数
f:function test(a,b){
return a<b ? a:b;
}
};
console.log(ob6.name+' '+ob6.f(1,10));
运行结果:

对象引用:不同的变量名指向同一个对象,那么它们都是这个对象的引用,即指向同一个内存地址!修改其中一个变量,会影响到其它变量!
var obj={
name:'Dog'
}
var o=obj;
console.log(o);
o.sex='male';//修改o,同时会影响obj
console.log(o,obj);
delete obj.name;
console.log(o,obj);
运行结果:

注意:当取消一个变量对对象的引用,则不会对另外一个变量造成影响!
obj=100;
console.log('此时obj=100,不是对象的引用了');
console.log(obj,o);
运行结果:

但是这种引用只限于对象,其它原始数据类型的数据依然是传值引用,即值的拷贝!
一个值发生变化,另一个值不会跟着发生相应的变化!
var v1=10;
v2=v1;
console.log(v1,v2);
v2=100;
console.log(v1,v2);
v1=1000;
console.log(v1,v2);
运行结果:

查看对象中所有键名(属性):使用Object.keys()方法。
var obj2={
name:'Array',
sex:'mail',
age:180
};
console.log(Object.keys(obj2));
运行结果:

对象中的delete命令:一般删除对象中存在或不存在的键(属性),都返回true;除非对象设置configurable:false,此时delete后返回false。
同时delete不能删除继承来的属性。
var obj3={
name:'xiaoming',
grade:'middle school',
age:20
};
console.log(obj3.age);
console.log(delete obj3.age);//返回 true
console.log(obj3.age);//此时返回undefined
console.log(delete obj3.address);//返回true,纵然address键不存在
console.log(delete obj3.toString);//返回true,但是继承来的方法并未被删除
console.log(obj3.toString);
设置configurable:false后:
var obj4=Object.defineProperty({},'p',{
value:100,
configurable:false
});
console.log(delete obj4.p);//返回false
当然,前面学习变量申明时,就知道了delete 不能删除var申明的变量。(var 申明的是顶层对象,即window的属性,默认不可删除!)

检测对象中是否包含某个属性:in运算符!但是用in检测对象继承的属性,也返回true!!!
var obj5={
language:"Go,Dart",
company:'google',
product:'chrome'
};
console.log('------------');
if('company' in obj5){
console.log('yes');
}else{
console.log('no');
}
console.log('toString' in obj5);//in,继承来的属性,返回true
console.log(obj5.hasOwnProperty('toString'));//继承来的属性,返回false
在JavaScript中,所有由var申明的全局变量都是顶层对象(window)的属性(--一切皆对象),都可以用in运算符检测。
console.log('wondow -------');
b=1000;
console.log(b in window);//false
var a=100000;
console.log(a in window);//true
var x=1;
if(window.x){
console.log('这种方法不能检测空字符串或null或undefined');
}
if(x){
//执行不下去了,报错,not definded
}
for...in循环遍历对象属性:
1.只遍历可遍历(enumerable)的属性,会跳过不可遍历的属性;
2.不仅遍历自身属性,还遍历继承属性。
with:操作同一个对象的多个属性时,提供书写上的一些方便。
var obj6={
name:"apple",
name1:'blue',
name2:'cat'
};
console.log('obj6-----');
with(obj6){
console.log(name);//返回"apple"
}
但是with很容易创造全局变量(即没有经过var申明):
with(obj6){
age=100;//obj6中没有这个属性
console.log(age);
}
所以with缺点:无法判断变量如age是对象的一个属性,还是一个全局变量;这样不利于代码的排错和模块化;编译器无法对代码进行优化,只能运行时判断,拖慢了运行速度。因此不建议使用with,可以采用临时变量进行代替。
但是with的一个使用场景是:模板引擎变量替换。
javascript(三):对象的更多相关文章
- JavaScript RegExp 对象的三种方法
JavaScript RegExp 对象有 3 个方法:test().exec() 和 compile().(1) test() 方法用来检测一个字符串是否匹配某个正则表达式,如果匹配成功,返回 tr ...
- 从零构建JavaScript的对象系统
一.正统的类与继承 类是对象的定义,而对象是类的实例(Instance).类不可直接使用,要想使用就必须在内存上生成该类的副本,这个副本就是对象. 以Java为例: public class Grou ...
- JavaScript 三个组成部分
1.核心(ECMAScript) ECMAScript 仅仅是一个描述,定义了脚本语言的所有属性.方法和对象.其他语言可以实现 ECMAScript 来作为功能的基准,JavaScript 就是这样: ...
- 关于JavaScript中对象的继承实现的学习总结
一.原型链 JavaScript 中原型链是实现继承的主要方法.其主要的思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.实现原型链有一种基本模式,其代码如下. function Super ...
- javascript中对象的深度克隆
记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...
- JavaScript日期对象使用总结
javascript Date日期对象的创建 创建一个日期对象: var objDate=new Date([arguments list]); 我总结了参数形式主要有以下3种: new Date(& ...
- JavaScript 三种创建对象的方法
JavaScript中对象的创建有以下几种方式: (1)使用内置对象 (2)使用JSON符号 (3)自定义对象构造 一.使用内置对象 JavaScript可用的内置对象可分为两种: 1,JavaScr ...
- JavaScript 本地对象、内置对象、宿主对象
首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...
- 从头开始学JavaScript (三)——数据类型
原文:从头开始学JavaScript (三)--数据类型 一.分类 基本数据类型:undefined.null.string.Boolean.number 复杂数据类型:object object的属 ...
- 第一百二十节,JavaScript事件对象
JavaScript事件对象 学习要点: 1.事件对象 2.鼠标事件 3.键盘事件 4.W3C与IE JavaScript事件的一个重要方面是它们拥有一些相对一致的特点,可以给你的开发提供更多的强大功 ...
随机推荐
- JAVA常用的异常处理情况
从编程到现在,遇见过很多次程序崩的情况,好多时候都不知道怎么去解决才好,一般性解决就是百度或者问别人,但是每一次百度解决的下一次还是会遇见同样的问题,也没有系统的整理梳理过相关的处理异常的知识,再一次 ...
- HBase系列文章(转)
HBase概念学习(一)基本架构 HBase概念学习(二)JAVA API操作概览 HBase概念学习(三)Java API之CRUD(增查改删) HBase概念学习(四)Java API之扫描和过滤 ...
- shell下的几个命令
参考博客: https://www.cnblogs.com/-zyj/p/5760484.html 1. 批量删除筛选的文件夹 ls -l | grep ^d | xargs rm -rf 2. ...
- 关于Oxygen版 Eclipse JSP或html 中<option>标签嵌入jstl 如<c:if>出现报错
Oxygen版 Eclipse JSP或html 中<option>标签嵌入jstl 如<c:if>出现报错 好好的学框架的整合,结果在<option>中加入< ...
- nginx 、springMvc(非分布式)相应的限流、消峰
互联网服务赖以生存的根本是流量, 产品和运营会经常通过各种方式来为应用倒流,比如淘宝的双十一等,如何让系统在处理高并发的同时还是保证自身系统的稳定, 通常在最短时间内提高并发的做法就是加机器, 但是如 ...
- 使用shell脚本监控用户登陆服务器并发送提示信息给微信
1.需要在/etc/ssh/目录下面创建一个名为sshrc的文件,执行权限可给可不给,那么在有人通过ssh远程登录这台服务器的时候,这段脚本就会被执行 #!/bin/bash ###V1---### ...
- 报错解决——SSL: CERTIFICATE_VERIFY_FAILED
SSL: CERTIFICATE_VERIFY_FAILED Python 升级到 2.7.9 之后引入了一个新特性,当使用urllib.urlopen打开一个 https 链接时,会验证一次 SSL ...
- what's the python之异常处理
what's the 异常 python程序中会出现异常,即bug.若出现异常程序就报错,异常之后的代码就不会继续往下执行,这是一个正常程序不允许出现的,但是在某些程序交互的时候难免会因为用户输入问题 ...
- 20165236 实验二 《Java面向对象程序设计》实验报告
20165236 实验二<Java面向对象程序设计>实验报告 姓名:郭金涛 学号:20165236 课程:Java程序设计 指导老师:娄嘉鹏 实验时间:2 ...
- 使用SBT构建Scala应用【转载】
使用SBT构建Scala应用 SBT简介 SBT是Simple Build Tool的简称,如果读者使用过Maven,那么可以简单将SBT看做是Scala世界的Maven,虽然二者各有优劣,但完成的工 ...