资讯专栏INFORMATION COLUMN

重新回顾JavaScript的数值类型

cncoder / 2852人阅读

摘要:中有两中数值类型基本数值类型和对象类型引用数据类型基本数据类型新增对象类型可变与不可变基本上数据类型是不可变的,我们不能给他添加属性,即使添加了属性也是无效的。基本上数据类型比较很简单,常规思维可以理解基本数据类型对比,没毛病,很好理解。

JavaScript中有两中数值类型:基本数值类型和对象类型(引用数据类型)

基本数据类型:

Boolean   
undefined
Null  
String       
Number  
Symbol   // (ES6新增)

对象类型:

Function
Object
Array

可变与不可变
基本上数据类型是不可变的,我们不能给他添加属性,即使添加了属性也是无效的。而引用数据类型则可以添加属性,例如

var a = 1;
a.b = 2;
var c = a.b;
console.log(a);        // 1
console.log(a.b);      // undefined
console.log(c);        // undefined

显然,当我们试图给a.b或者c赋值的时候,都是undefined

function fn(){};
var arr = [1,2,3];
fn.a = 1;
arr.b = 2;
console.log(fn.a);     //1
console.log(arr.b);    //2

因为他们属于对象类型,支持添加对应的属性,别问为啥,因为对象类型的有这个“天生能力”

基本数值类型通过“值”来做比较,而对象数据类型通过“引用”做比较。
基本上数据类型比较很简单,常规思维可以理解

var a = "123";
var b = "123";
console.log(a === b);   //true

基本数据类型对比,没毛病,很好理解。第一句把“123”赋值给a,第二句把"123"赋值给b,那么a就是"123",b也是同样的道理,比较的结果肯定相等。而引用数据类型对比,并非把等号右侧的内容赋值给左侧变量,而是将左侧变量指向右侧内容,举个栗子:

var a = {a:1};
var b = {a:1};
console.log(a == b);   //false

这个时候不能用“基本数据类型”的数据比较思维来看待这个了,这里画个图出来,相信就很好理解了

上面的对象分别是底下变量(a和b)的引用(指向),虽然左侧的{a:1}跟右侧的{a:1}看起来一模一样,但是他们还是独立的个体,不相等的。就像科学家克隆了一个动物,虽然可以跟母体长的一模一样,但他们终究是两个个体,看起来一模一样,但起码年龄不同的。但如果他们引用的来源相同的话,就返回值就是true了,举个栗子:

var a = {a:1};
var b = a;
console.log(a === b)

图示

引用(指向)是一样的,那么他们的值肯定是相等的。就像夫妻俩生了第一胎,是个女孩A,国家开放二胎政策后,他们琢磨着再生一个,结果生了双胞胎B和C,这个时候B和C都叫A亲姐姐,那么很明显了,B的姐姐和C的姐姐肯定是同一个人。
这个时候,有人提出问题来了:如果我改变{a:1}的值,他们是否还是相等的呢?答案是只要他们指向同一个地方,无论这个指向的值怎么变,都是一样的。就像B和C的姐姐是A,10年以后A长大了,但她还是B和C的姐姐。代码如下:

var a = {a:1};
var b = a;
b.a = 2;
console.log(a);    // {a:2}
console.log(b);    // {a:2}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92807.html

相关文章

  • JavaScript数据类型回顾

    摘要:一门语言可以使用的值的类型,称为该语言的数据类型。中没有为字符串定义特殊的数据类型。布尔类型表示值和值。输出支持的布尔操作包括逻辑与逻辑或和逻辑非。在很多常见任务中,布尔操作对于检验要求输入的字符串非常有用。 1、标识符(Names) 标识符由一个字母、下划线和美元符开头,其后可以选择性的加上一个或多个字母、数字或下划线。标识符不能使用下面这些保留字: abstract boolean...

    ralap 评论0 收藏0
  • JavaScript数据类型回顾

    摘要:一门语言可以使用的值的类型,称为该语言的数据类型。中没有为字符串定义特殊的数据类型。布尔类型表示值和值。输出支持的布尔操作包括逻辑与逻辑或和逻辑非。在很多常见任务中,布尔操作对于检验要求输入的字符串非常有用。 1、标识符(Names) 标识符由一个字母、下划线和美元符开头,其后可以选择性的加上一个或多个字母、数字或下划线。标识符不能使用下面这些保留字: abstract boolean...

    ideaa 评论0 收藏0
  • JavaScript回顾学习:数据类型

    摘要:本篇文章将回顾学习种基本类型和及数据类型之间的转化。如果不能,再调用对象的方法,再测试返回值是否可以被转化为数值。首先可以用于任何数据类型,另外两个则是专门用于把字符串转换成数值。 概述 ECMAScript中有5中基本数据类型:Undefined,Null,Boolean,Number,String,还有一种复杂数据类型对象(Object),Object本质上是由一组无序的名值对组成...

    youkede 评论0 收藏0
  • 基础回顾javascript数据类型

    摘要:栈区由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。属性返回对创建此对象的构造函数的引用。所有的和都是宿主对象参考高级程序设计堆和栈的概念和区别全面解析中的数据类型与类型转换 数据类型 数据类型划分 javascript中定义了6中基本数据类型(原始值类型),和一种复杂数据类型(引用类型),所谓复杂类型,其本质是由无序的名值对(key:val...

    codergarden 评论0 收藏0
  • javascript基础篇小结

    摘要:表示尚未存在的对象是一个有特殊意义的值。可以为变量赋值为,此时变量的值为已知状态不是,即。用来初始化变量,清除变量内容,释放内存结果为但含义不同。且它俩与所有其他值比较的结果都是。,需要两个操作数同时转为。 转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课时 入门基础 知识点: 操作系统就是个应用程序 只要是应用...

    hiyang 评论0 收藏0

发表评论

0条评论

cncoder

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<