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事件的一个重要方面是它们拥有一些相对一致的特点,可以给你的开发提供更多的强大功 ...
随机推荐
- LeetCode 496 Next Greater Element I 解题报告
题目要求 You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset ...
- Chrome中安装Firebug插件
Chrome中的Firebug插件:Firebug Lite 1.Firebug Lite下载:http://chromecj.com/web-development/2015-05/471/down ...
- vue打包后出现"Failed to load resource: net::ERR_FILE_NOT_FOUND"错误
创建vue脚手架搭建项目之后,用npm run build经行打包,运行index.html后出现异常: 打开dist/index.html, 诸如这些的,引入是有问题的, 这边的全部是绝对路径,而本 ...
- membership DB生成 & dll 强命名 & 证书生成
UPD(Membership)数据库安装1.使用 Aspnet_regsql.exe 安装数据库 在 C:\WINDOWS\Microsoft.NET\Framework\\aspnet_regsql ...
- 五、Docker
1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像: 运行中的这 ...
- Loadrunner回放脚本时报错Action.c(41): Error -27979: Requested form not found [MsgId: MERR-27979]
解决方法 打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HT ...
- MySQL安装失败解决的方法
一..msi版的MySQL安装包在最后执行的时候到第三步就死掉了,直接未响应 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd19iYXNrZXRib3ky ...
- 002-linux使用SecureCRT
一.ssh 登录linux系统 1.确定网络连通性:ping www.jd.com 2.rpm -qa | grep ssh 可以看到系统中ssh安装包 查找当前系统是否已经安装 注:如果没有安装SS ...
- python基础入门--input标签、变量、数字类型、列表、字符串、字典、索引值、bool值、占位符格式输出
# 在python3 中: # nian=input('>>:') #请输入什么类型的值,都成字符串类型# print(type(nian)) # a = 2**64# print(typ ...
- python的开发语言介绍
-开发语言: 高级语言:python.java.c#.php.GO.ruby.c++ ===>字节码 低级语言:c.汇编 ===>机器码 语言之间的对比: PHP:适用于写网页, ...