论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中,也有一些精妙的算法,用来对一些对象进行排序.我在面试迅雷的时候,也拿到一道 ...
随机推荐
- Oracle表字段的增加、删除、修改和重命名
本文主要是关于Oracle数据库表中字段的增加.删除.修改和重命名的操作. 增加字段语法:alter table tablename add (column datatype [default val ...
- 朝花夕拾之--大数据平台CDH集群离线搭建
body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body ...
- 烂泥:apache性能测试工具ab的应用
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试 ...
- 009.CentOS 6.7安装运行netmap
一.netmap简介: 1.netmap是一个高性能收发原始数据包的框架,由Luigi Rizzo等人开发完成,其包含了内核模块以及用户态库函数.其目标是,不修改现有操作系统软件以及不需要特殊硬件支持 ...
- To create my first app in iOS with Xcode(在Xcode创建我的第一个iOS app )
To create my first app in iOS create the project. In the welcome window, click “Create a new Xcode p ...
- Fitbit Flex 智能手环佩戴心得 主要说说过敏
参杂一篇杂文. 也是因为体重飙升,所以去年下半年的时候入手了一个Fitbit flex. 当时相比Jawbone up,nfc和ble的特性,以及防水性还是更吸引我一点.所以就入手了. 佩带了如此长的 ...
- 图灵机器人(问答机器人)API调用示例
问答机器人API文档:https://www.juhe.cn/docs/api/id/112 先上图: 说下大致实现的步骤: 1.首先使用了聚合数据的sdk,这样免费使用的数目可以多一些 2.使用gs ...
- apache poi导出excel报表
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"P ...
- XBOX ONE游戏开发常见问题
XBOX ONE游戏开发常见问题 终于弄懂这个在Unity的sdk在Account Picker切换账号的机制了,一个手柄注册一个账号,在游戏里面的时候,只有另外一个手柄选择自己的账号,系统的Acti ...
- 读Java面向对象编程(孙卫琴)
2.1创建Java源文件 Java应用由一个或多个扩展名为".java"的文件构成,这些文件被称为Java源文件,从编译的角度,则被称为编译单元. 本章包含两个Java源文件:Do ...