论javascript中的原始值和对象
javascript将数据类型分为两类:原始值(undefined、null、布尔值、数字和字符串),对象(对象、函数和数组)
论点:原始值不可以改变,对象可以改变;对象为引用类型;
'原始值不可以改变'不可以改变,如果动脑筋的同学肯定会怀疑了,你们字符串可以改变啊,不信你瞅下面的
var a = 'aa';
alert(a.toUpperCase());//弹出 AA
其实,这些只是表面现象,原始值字符串'a'其实并未发生改变,只是拷贝了一份然后对新的拷贝使用'toUpperCase'函数而已,有下面代码为证
var a = 'aa';
a.toUpperCase();
alert(a);//弹出'aa'
瞅着了吧,其实字符串'a'并没有发生变化
原始值的比较是值得比较,他们值相等时才相等。
对象和原始值不同,他们的值可以修改,如下
var obj = {'a' : 1, 'b' : 2};
obj.a = 3;
obj.b = 4; var arr = [1, 2, 3];
arr[0] = 4;
对象的比较并发值得比较,即使两个对象包含同样的属性和值,它们也是不相同的
奉上以下代码为证:
var a = {'x' : 1}, b = {'x' : 1};
alert(a === b);//false var c = [1], d = [1];
alert(c === d);//false
对象的值都是引用,对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等
'对象的值都是引用' 奉上如下代码以为证
var a = {'x' : 1};
var b = a;
a.x = 2;
alert(b.x);// 弹出2 var c = function(){
this.x = 1;
}
var d = new c;
var e = d;
d.x = 3;
alert(e.x);//弹出3 var aa = [1, 2, 3];
var bb = aa;
aa[0] = 11;
alert(bb[0]);//弹出 11
'对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等' 奉上如下代码为证
var a = [1, 2, 3];
var b = a;
a[1] = 5;
alert(a === b);//弹出true var aa = [1, 2, 3];
var bb = [1, 2, 3];
alert(aa === bb);//弹出false
如我们上面的论述,对象的赋值只是赋值的引用,并没有进行任何拷贝,如果你想要得到一个拷贝的副本,则必须显式的为对象的每个属性或数组的每个元素进行拷贝,如下
var a = [1, 2, 3, 4, 5];
var b = [];
for(var i =0, _len = a.length; i < _len; i++){
b[i] = a[i];
}
同样的如果我们想要对比两个数组或者对象,必须将数组或对象的每个元素或属性进行比较
鄙人才疏学浅,有不足之处,欢迎补足!
论javascript中的原始值和对象的更多相关文章
- javascript中的原始值和复杂值
× 目录 [1]特性 [2]存储方式 [3]访问方式 [4]比较方式 [5]动态属性 前面的话 javascript的数据类型可以分为两种:原始类型和引用类型.原始类型也称为基本类型或简单类型,jav ...
- JavaScript不可变原始值和可变的对象引用
一.JavaScript不可变原始值 JavaScript中的原始值(undefined,null,布尔值,数字和字符串)与对象(包括了数组和函数)有着根本的区别.原始值是不可变的(undefined ...
- 【JavaScript 从零开始】 原始值和对象引用、类型转换
JavaScript 中的原始值(undefined.null . 布尔值.数值和字符串)于对象(包括数组和函数)有着根本区别. 原始值是不可更改的:任何方法都无法改变(或“突变”)一个原始值. 对于 ...
- 前端学习 第二弹: JavaScript中的一些函数与对象(1)
前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...
- 透过一道面试题来探探JavaScript中执行上下文和变量对象的底
在做面试题之前,我们先搞清楚两个概念 执行上下文(execution context) 变量对象(variable object) 执行上下文 我们都知道JavaScript的作用域一共分三种 全局作 ...
- Javascript中的Keycode值列表
关于如何得到一个键在Javascript中的Keycode值,可以参考: <body onkeypress=alert(event.keyCode)>请按任意键,你将得到该键的键值! ke ...
- python 输入加密的MD5值,并搜索文件中的原始值
此程序可以输入一串MD5的值,并在指定的文件中搜索到原始值.程序自有用处. #输入加密的MD5值,并搜索文件中的原始值 by qianxiao996 #博客地址:https://blog.csdn.n ...
- JavaScript数据操作--原始值和引用值的操作本质
我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两 ...
- sort方法实际应用详解---javascript中对一个对象数组按照对象某个属性进行排序
转载: 查看原文 在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同.在javascript中,也有一些精妙的算法,用来对一些对象进行排序.我在面试迅雷的时候,也拿到一道 ...
随机推荐
- 0022 Java学习笔记-面向对象-继承、多态、组合
继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...
- c# winform插件
插件接口 namespace IMsg { ///<summary> /// 这是插件必须实现的接口,也是主程序与插件通信的唯一接口 /// 换句话说,主程序只认识插件里的这些方法 /// ...
- 导出HTML
版权声明:本文为博主原创文章,未经博主允许不得转载.
- Linux磁盘管理之创建磁盘分区05
一.磁盘基础知识 磁盘安装在计算机上后,在系统读取到硬盘后并不能直接使用,必须经过分区.格式化才能够正确使用.这一次主要是针对磁盘分区进行简单总结,存储设备类型:U盘.光盘.软盘.硬盘.磁带. 硬盘接 ...
- Mysql数据库的通用安装方法
安装方式简介 Mysql数据库也时不时的用过一段时间,具体使用的功能都比较浅显,没有具体深入学习.最近一段在公司部署iNeedle系统时经常避免不了要安装apache和Mysql数据库.一般Mysql ...
- android JAVA字符串转日期或日期转字符串(转)
用法: SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " ); 这一行最重要,它确立了转换的 ...
- 禁用站点asp运行
禁用站点asp运行 进入 Mcafee 的 VirusScan 控制台,双击访问保护->进文件, 共享资源和文件夹保护,在要阻挡的文件和文件夹那点添加 规则名: 禁止网站进程在任何地方修建和修改 ...
- storm集群搭建
安装环境: 虚拟操作系统:centOS7 64位 2台 IP地址为192.168.1.10 192.168.1.11 内存:1GB内存 zookeeper版本 :3.4.6 Storm版本:0. ...
- Spring学习之AOP总结帖
AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...
- AC日记——字符替换 openjudge 1.7 08
08:字符替换 总时间限制: 1000ms 内存限制: 65536kB 描述 把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串. 输入 只有一行,由一个字符串和两个字符组成,中间用 ...