论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中,也有一些精妙的算法,用来对一些对象进行排序.我在面试迅雷的时候,也拿到一道 ...
随机推荐
- x01.os.6: 8086 指令
M:存储器A:累加器R:寄存器SEGR:段寄存器IMM:立即数X:标志位状态依运算或操作结果而定U:相应标志位未定义-:不影响 数据传送指令 时钟数 访问次数 字节数 对标志位影响 指令意义 MOV ...
- Error while performing database login with the sqljdbc driver:Unable to create connection. Check your URL.
从微软官网下载jdbc驱动包sqljdbc4,运行sqljdbc_4.0.2206.100_chs.exe,将驱动包解压到了Microsoft JDBC Driver 4.0 for SQL Serv ...
- java报表工具FineReport的JS编辑框和URL地址栏语法简介
JS编辑框: 1.FineReport的js. 作为一款BS产品,browser端的JavaScript是必不可少的. FineReport中的js是已经调用了finereport.js的. 大家知道 ...
- Neutron分析(5)—— neutron-l3-agent中的iptables
一.iptables简介 1.iptables数据包处理流程 以本机为目的的包,由上至下,走左边的路 本机产生的包,从local process开始走左边的路 本机转发的包,由上至下走右边的路 简化流 ...
- [转]Ionic系列——CodePen上的优秀Ionic_Demo
本文转自:http://my.oschina.net/u/1416844/blog/514361?fromerr=bbFC5JIl 案例网站 Slidebox with Dynamic Slides ...
- 退役了退役了-AJAX
hi 昨晚打球悲剧的把脚崴了. 要知道,上一次崴脚是四年前:那一次伤的是左脚,也是我这么多年打篮球的生涯中,这么多次崴脚中,最严重的一次受伤.休息了整整一个月,受寝室兄弟们的无微不至的照顾,最后也买了 ...
- 搭建PHP官方框架zend framework 2(LINUX)
在五花八门的语言里,PHP作为我第一个觉得欣赏的理由,就是它的简单和快捷,因为它封装了许多的常用函数.PHP作为网站中一种算作比较流行的语言,也产生各种优秀的框架.我所接触过的有zend framew ...
- WinCE项目应用之RM905a+医用放射性核素活度计
RM905a+医用放射性核素活度计大概是我做的第一个WinCE项目,RM905a的升级版.RM905a是曾经的老大LZF 2000年左右的作品,基于51单片机开发,数码管显示,稳定可靠,好似目前还在生 ...
- Quantum Bogo sort浅谈
1.普通的猴子排序(bogo sort) 猴子排序百科 en.wikipedia.org/wiki/Bogosort 不停的随机打乱序列,然后检查,直到排好序 复杂度O(n*n!) while not ...
- C# Enum 进行逻辑运算
Enum定义 enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型. 通常情况下,最好是在命名空间內直接定义 enum,以便该命名空间中所有的类都能够同样方便地 ...