一、JavaScript不可变原始值

  JavaScript中的原始值(undefined,null,布尔值,数字和字符串)与对象(包括了数组和函数)有着根本的区别。原始值是不可变的(undefined,null,布尔值,数字和字符串)任何方法都不法更改(或“突变”)一个原始值。

var s= "Hello world!";
console.log(s.toUpperCase()); //=>HELLO WORLD! //可以看到返回的值是....
console.log(s); //=>Hello world! //可以看到这个值没有被修改

可以看到s的值最终是没有被修改

原始值的比较是值值的比较,只有在他们的值相同的情况下,Javascript才会认为他们是相等的。对于两个单独的字符串来讲,当它们的长度相等且每个索引的字符都相等时,Javascript才会认为他们是相等的


二、可变的对象引用

  对象和原始值不同,它们首先是可变的,也就是说他们值是可以改变的;

  

var  a = {x:1};
a.x= 2;
a.y= 3; console.log(a.x); //=>2
console.log(a.y); //=>3

  下面的定义也有“二”:对象的比较和原始值的的值的比较,就算是两个对象包含同样的属性及相同的值,它们也是不相等的只有在索引元素完全相等的两个数组也不会相等的

var arr1 = ['a','b','c'];
var arr2 = ['a','b','c'];
//可以看到上面的两个数组arr1和arr2的元素是相同的
console.log(arr1 === arr2); //=>false 首先用一下javascript当中的最牛X的恒等来比较一下!发现不相等
console.log(arr1 == arr2); //=>false 最后在用一下普通的比较一下,发现也是不相

  那么就看上面的定义的,那样,我们用他们的值和索引来比较看看他们会不会相等呢?

var arr1 = ['a','b','c'];
var arr2 = ['a','b','c'];
//可以看到上面的两个数组arr1和arr2的元素是相同的
console.log(arr1 === arr2); //=>false 首先用一下javascript当中的最牛X的恒等来比较一下!发现不相等
console.log(arr1 == arr2); //=>false 最后在用一下普通的比较一下,发现也是不相同的; //写一个判断元素和值比较的一个函数
function test(arr1,arr2){
if(arr1.length != arr2.length) return false; //如果他们的数组长度都不相等的话,那么他们一定是不相等的;
for(var i = 0; i < arr1.length; i++)
if(arr1[i] !== arr2[i])return false; //如果两个数组当中的有一个值不相等就返回false,判定为两个数组不相等
return true; //如果是返回的是true的话,那么说明arr1和arr2是相等的两个数组;
} console.log(test(arr1,arr2)); //=>true 可以发现他们是相等的;这里我使用了恒等来判定的;这样判定可以防止javascript进行数据类型的隐式救困转换

JavaScript不可变原始值和可变的对象引用的更多相关文章

  1. js 不可变的原始值和可变的对象引用

    javascript中的原始值(undefined.null.布尔值.数字和字符串)与对象(包括数组和函数)有着根本区别.原始值是不可更改的:任何方法都无法更改(或“突变”)一个原始值.对数字和布尔值 ...

  2. javascript中的原始值和复杂值

    × 目录 [1]特性 [2]存储方式 [3]访问方式 [4]比较方式 [5]动态属性 前面的话 javascript的数据类型可以分为两种:原始类型和引用类型.原始类型也称为基本类型或简单类型,jav ...

  3. 【JavaScript 从零开始】 原始值和对象引用、类型转换

    JavaScript 中的原始值(undefined.null . 布尔值.数值和字符串)于对象(包括数组和函数)有着根本区别. 原始值是不可更改的:任何方法都无法改变(或“突变”)一个原始值. 对于 ...

  4. 论javascript中的原始值和对象

    javascript将数据类型分为两类:原始值(undefined.null.布尔值.数字和字符串),对象(对象.函数和数组) 论点:原始值不可以改变,对象可以改变:对象为引用类型: '原始值不可以改 ...

  5. JavaScript数据操作--原始值和引用值的操作本质

    我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两 ...

  6. JavaScript检测原始值、引用值、属性

    上周写过一篇读书笔记<编写可维护的JavaScript>之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑较多的雷区,所以特此把该章节重新整理分享,希望大家不再坑队友(>﹏& ...

  7. JavaScript中对象转换为原始值的规则

    JavaScript中对象转换为原始值遵循哪些原则? P52 对象到布尔值对象到布尔值的转换非常简单:所有的对象(包括数字和函数)都转换为true.对于包装对象亦是如此:new Boolean(fal ...

  8. javascript中可变值与不可变值(原始值)

    字符串原始值修改不了1 var str = "abc"; 2 str[0] = "d"; 3 console.log(str[1]="f") ...

  9. (复杂值vs原始值)&&内存空间 — 准确我们的JavaScript世界观(一):

    写在前面 最近在读<JavaScript启示录>,这本书不是JavaScript的详尽的参考指南,但是把对象作为了解JavaScript的透镜,受益匪浅. 那么我们先来聊一下JavaScr ...

随机推荐

  1. poj 1696 Space Ant 极角排序

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...

  2. hdu4281 区间dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4283 #include<iostream> #include<algorithm&g ...

  3. Hardwood floor - SGU 131(状态压缩)

    题目大意:用 2*1 或者2*2-1的格子覆盖M*N的矩阵,有多少种覆盖方式. 分析:容易知道有以下6种放置方式. 然后用深搜的方法直接搞出来就行了,不过要使用两个变量来判断本位是否受影响.如果本行的 ...

  4. hpuoj 1706: 牛B【正向拓扑】【建图】

    1706: 牛B 时间限制: 1 Sec  内存限制: 128 MB提交: 22  解决: 6[提交][状态][讨论版] 题目描述 一群来自日本恐怖分子带着AK47,火箭弹,开着坦克,带着飞机,强行洗 ...

  5. Subversion/Git/ReviewBoard工作流程

    根据My (work)Git Workflow进行修改,在 Windows下进行测试,http://mojodna.net/2009/02/24/my-work-git-workflow.html 目 ...

  6. android_小总结_方法过时的兼容处理

    随着android系统的升级,有些过时的方法已经不再使用,但是又要兼容老的版本,所以这个时候可以使用反射来处理下 举个列子pull_to_refresh 中有个方法找不到==initializeScr ...

  7. java对象数组的概述和使用

    1 public class Student 2 { 3 // 成员变量 4 private String name; 5 private int age; 6 7 // 构造方法 8 public ...

  8. jersey构建rest服务返回json数据

    1.  eclipse 创建 dynamic web project 2.  将jersey相关jar包放到libs目录下 3. web.xml 增加 jersey 相关内容 <?xml ver ...

  9. POJ 1737 统计有n个顶点的连通图有多少个 (带标号)

    设f(n)为所求答案 g(n)为n个顶点的非联通图 则f(n) + g(n) = h(n) = 2^(n * (n - 1) / 2) 其中h(n)是n个顶点的联图的个数 这样计算 先考虑1所在的连通 ...

  10. iOS原生CIFilter创建二维码

    iOS原生CIFilter创建二维码 2016-05-31 未来C iOS原生CIFilter创建二维码 关于二维码生成,网上也是有很多,很早以前的第三方库大多数都是通过C++写,也是有的如zxing ...