资讯专栏INFORMATION COLUMN

原型模式故事链(3)--JS的数据类型、以及区别、区分、转化

stdying / 1723人阅读

摘要:所以不论你妈妈是喊,狗蛋回家吃饭了,还是喊小明回家吃饭了,其实喊的都是你。当然的嘛狗蛋买了件新衣服,小明当然就有这件新衣服了。。。

上一章--原型链讲解:传送门:https://segmentfault.com/a/11...

在上一章讲解原型链时提到了:所有的引用类型都有一个_proto_属性,称之为隐式原型。
那么引用类型是什么鬼?


尽量简单的讲解一下javascript中的数据类型:
在JS中有两大数据类型:
1.基本数据类型,也称为值类型
2.复杂数据类型,也成为引用类型

值类型:Number、String、Boolean、Null、Undefined
引用类型:Object、Array、Function

所以JS一共有8种数据类型

那么为什么要区分为值类型和引用类型呢?它们有什么不同之处
客官且看:
值类型是值的“复制”,以值类型中的Number类型为例。

</>复制代码

  1. var num = 100;
  2. var num2 = num;
  3. num = 200;
  4. console.log(num2);//100
  5. console.log(num);//200

在上述代码中,第2行就是把num的值100复制给num2,num2的值就为100了。在第3行num的值再变化为200时与num2已经没关系了。

引用类型是值“传递”,以引用类型中的Object类型为例。

</>复制代码

  1. //例1:
  2. var obj = {a:100};
  3. var obj2 = obj;
  4. obj.a = 200;
  5. console.log(obj2.a);//{a:200}
  6. console.log(obj.a);//{a:200}
  7. //例2:
  8. var arr = [1,2];
  9. var arr2 = arr;
  10. arr2[0] = 3;
  11. console.log(arr);//[3,2]
  12. console.log(arr2);//[3,2]

在上述代码中,例1第2行代码中,把obj的值传递给obj2,在这里obj2只是obj的一个别名!

什么意思呢?就是说你叫做小明,你妈妈叫你狗蛋,狗蛋就是你的别名。所以不论你妈妈是喊,狗蛋回家吃饭了,还是喊小明回家吃饭了,其实喊的都是你。所有obj和obj2其实是指向同一内存地址的,他们就是同一个东西,当其中一个变了,另一个当然也随着变化。

从例1和例2中可以看出obj变化了会对obj2影响,arr2变化了arr也变化了。当然的嘛!狗蛋买了件新衣服,小明当然就有这件新衣服了。。。


如何判断一个变量是什么数据类型呢?
typeof()可以查看值类型所有数据类型,能区分出引用类型的Function,但是对于引用类型的Object和Array酒不能区分,都会显示为Object.
null是个特殊的东西,会显示为object,有兴趣的可以去看看,这里不多说。

那怎么区分出数组呢?答案是:instanceof
如:a instanceof Array 只有当a是数组时才会是true.

</>复制代码

  1. var a = 5;
  2. var b = "abc";
  3. var c = null;
  4. var d = undefined;
  5. console.log(typeof(a))//number
  6. console.log(typeof(b))//string
  7. console.log(typeof(c))//object
  8. console.log(typeof(d))//undefined
  9. var obj = {a:1}
  10. var arr = [1,2]
  11. var fn = function(){
  12. console.log("hello");
  13. }
  14. console.log(typeof(obj))//object
  15. console.log(typeof(arr))//object
  16. console.log(typeof(fn))//function
  17. console.log(arr instanceof Object)//true
  18. console.log(obj instanceof Object)//true
  19. console.log(arr instanceof Array)//true
  20. console.log(obj instanceof Array)//false
  21. console.log(arr instanceof Number)//false

数据类型转换:
数据类型的转换有两种:隐式转换、强制转换
隐式转换:隐式转换通常发生在运算中。

</>复制代码

  1. var num = 10;
  2. var obj = "20"
  3. var res = num + obj;//10+"20"
  4. console.log(res) //"1020"
  5. var obj2 = "11";
  6. var num2 = 5;
  7. var res2 = obj2 > num2;//"11">5
  8. console.log(res2)//true

强制转换:一般用String()、Number()、Boolean()转化(可能会有失精度)

</>复制代码

  1. var num = 123;
  2. console.log(typeof(num))//number
  3. console.log(typeof (String(num)))//string

例行总结:
数据类型是JS中很重要的一部分,特别是值类型和引用类型的赋值区别。一定要理解好~

下一回:变量提升与函数声明

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

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

相关文章

  • 原型模式故事(3)--JS数据类型以及区别区分转化

    摘要:所以不论你妈妈是喊,狗蛋回家吃饭了,还是喊小明回家吃饭了,其实喊的都是你。当然的嘛狗蛋买了件新衣服,小明当然就有这件新衣服了。。。 上一章--原型链讲解:传送门:https://segmentfault.com/a/11... 在上一章讲解原型链时提到了:所有的引用类型都有一个_proto_属性,称之为隐式原型。那么引用类型是什么鬼? 尽量简单的讲解一下javascript中的数据类...

    RiverLi 评论0 收藏0
  • 原型模式故事(3)--JS数据类型以及区别区分转化

    摘要:所以不论你妈妈是喊,狗蛋回家吃饭了,还是喊小明回家吃饭了,其实喊的都是你。当然的嘛狗蛋买了件新衣服,小明当然就有这件新衣服了。。。 上一章--原型链讲解:传送门:https://segmentfault.com/a/11... 在上一章讲解原型链时提到了:所有的引用类型都有一个_proto_属性,称之为隐式原型。那么引用类型是什么鬼? 尽量简单的讲解一下javascript中的数据类...

    saucxs 评论0 收藏0
  • 如何继承Date对象?由一道题彻底弄懂JS继承。

    摘要:前言见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正。倘若用的是中文搜索。所以最终的实例对象仍然能进行正常的原型链回溯,回溯到原本的所有原型方法这样通过一个巧妙的欺骗技巧,就实现了完美的继承。 前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正。 20180201更新: 修改用词描述,如组合寄生式改成寄生组合式,修改多处笔误(感谢@Yao Ding的...

    sunnyxd 评论0 收藏0
  • 原型模式故事(2)--原型四大理论

    摘要:所有引用类型的隐式原型指向它构造函数的显式原型。理论就不验证了,写原型模式时。原型模式构造函数原型实例化橘猫鱼呀鱼橘猫鱼呀鱼在上述代码中,在之后就相当于这个函数。 上一章:new一个对象的过程 https://segmentfault.com/a/11... 原型链4大理论:1.所有的引用类型都有一个_proto_属性,称之为隐式原型。 2.所有的函数(Function)都有一个pro...

    MRZYD 评论0 收藏0

发表评论

0条评论

stdying

|高级讲师

TA的文章

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