JS类型转换----引用类型篇

首先了解一下基本概念

  1. 关于JS的数据类型,一共有:number、string、boolean、symbol、undefined、object以上六种
  2. typeof返回的类型:Object、undefined、String、Number、Function、Boolean
  3. 类型转换Boolean为false的类型:0、-0、NaN、undefined、“空”、false、null,除此之外,其它都会转化为true

想必一些基本的类型转换大家并不陌生,但接下来要说的是关于引用类型的转换,上代码!!!

	1 + [1, 2] = "11,2"
	1 + [] = "1"
	1 + {a: 123} = "1[object Object]" //注意第一个o小写,第二个大写
	[] + {} = "[object Object]"

这些结果可能跟我们想得有点不太一样,关于数组与对象,他们之间的转换有着一定的小秘密。

1.每个数组和对象都会继承toString和valueOf这两个方法
2. 在有类型转换的时候,会先执行toString(),后执行valueOf()

举个栗子:(对象的)

	var obj = {
	   valueOf(){
	     return 'hello'
	   },
	   toString(){
	     return 'world'
	   }
	 }
	 console.log(1 + obj)  // "1hello"
	 var obj = {
	   toString(){
	     return 'world'
	   }
	 }
	 console.log(1 + obj)  // "1world"

这两者稍作对比,toString与valueOf的先后顺序一目了然呀
再举一个栗子:(数组的)

	Array.prototype.valueOf = function(){
      return 'abc'
    }
    Array.prototype.toString = function(){
      return 'cba'
    }
    console.log(1 + arr)  // "1abc"
	Array.prototype.toString = function(){
      return 'cba'
    }
    console.log(1 + arr)  // "1cba"

同理,数组在类型转换时执行的先后顺序与对象一样,先toString后valueOf

  • toString和valueOf都是可以被覆盖的,当对象的toString没有被覆盖时,会自动返回[object 对象类型]
  • 其中,Array、Object、Date就是它的对象类型

基于此,下面的输出语句就很好解释了

	1 + [1, 2] = "11,2"

解析:

 1. [1, 2].toString() -->  "1, 2"
 2. "1, 2".valueOf() -->  "1, 2"
 3. 1 + "1, 2" -->  "11,2"
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值