关于JavaScript隐式转换

本文深入探讨JavaScript中常见的隐式类型转换场景,包括if判断、算术运算、点操作符使用、关系运算符比较及各类数据类型间的相互转换。通过实例说明,帮助读者理解JS的弱类型特性和其带来的潜在问题。

    由于JavaScript是一种弱类型特性语言,定义变量的时候无需指定变量类型。因为在运算过程中会存在隐式转换。

常见的隐式转换场景

我们经常在开发过程中遇到如下场景:

  • if判断中
  if(XXX){
        ...
    }

这里就发生了隐式转换,我们知道if的判断条件是Boolean类型,代码在执行到if判断时,js将XXX转换成了boolean类型。

  • 加号"+" 与 减号 “-”
var num= 1 + 2 + '3'
console.log(mum);  //'33'

var m = 3 - true
console.log(m); //2

可以看出有些情况下+用作加号操作符,有些时候+作为字符串连接符,true被转换为 number类型,值为1,相减后得到2。

  • .点号操作符
var a = 8;
console.log(a.toString()); // '8';

var b = 'jack';
console.log(b.valueOf()); //'jack';

在对数字,字符串进行点操作调用方法时,默认将数字,字符串转成对象。

  • 关系运算符比较时
 3 > 4  // false
"2" > 10  // false
"2" > "10"  // true

如果比较运算符两边都是数字类型,则直接比较大小。如果是非数值进行比较时,则会将其转换为数字然后在比较,如果符号两侧的值都是字符串时,不会将其转换为数字进行比较,而是分别比较字符串中字符的Unicode编码。

String,Boolean,Number,对象之间的相互转换
  1. 其他类型转为字符串类型
  • null:转为"null"。
  • undefined:转为"undefined"。
  • Boolean:true转为"true",false转为"false"。
  • Number:11转为"11",科学计数法11e20转为"1.1e+21"。
  • 数组:空数组[]转为空字符串"",如果数组中的元素有null或者undefined,同样当做空字符串处理,[1,2,3,4]转为"1,2,3,4",相当于调用数组的join方法,将各元素用逗号","拼接起来。
  • 函数:function a(){}转为字符串是"function a(){}"。
  • 一般对象:相当于调用对象的toString()方法,返回的是"[object,object]"。
 	String(null)  // "null"
    String(undefined) // "undefined"
    String(true)  // "true"
    String(false)  // "false"
    String(11)  // "11"
    String(11e20)  // "1.1e+21"
    String([])  // ""
    String([1,null,2,undefined,3])  // 1,,2,,3
    String(function a(){})  // "function a(){}"
    String({})  // "[object,object]"
    String({name:'jack'})  // "[object,object]"

  1. 其他类型转为Boolean类型
    只有null,undefined,0,false,NaN,空字符串这6种情况转为布尔值结果为false,其余全部为true,例子如下

    Boolean(null)  // false
    Boolean(undefined)  // false
    Boolean(0)  // false
    Boolean(false)  // false
    Boolean("false")  // true
    Boolean(NaN)  // false
    Boolean("")  // false
    Boolean([])  // true
    Boolean({})  // true
  1. 其他类型转为Number类型
Number(null)  // 0
Number(undefined)  //NaN
Number(true)  //1
Number(false)  //0
Number("11")  //11
Number("1.1e+21") //1.1e+21
Number("abc")  //NaN
Number([])   // 0
Number([0])  // 0
Number([1])  // 1
Number(["abc"])  NaN
Number({})  // NaN
相等(==)的隐式转换
  1. 字符串类型与数字类型相比较
  • 当字符串类型与数字类型相比较时,字符串类型会被转换为数字类型
  • 当字符串是由纯数字组成的字符串时,转换成对应的数字,字符串为空时转换为0,其余的都转换为NaN
	 "1" == 1  //true
    "" == 0  //true
    "1.1e+21" == 1.1e+21  //true
    "Infinity" == Infinity  //true
    NaN == NaN  //false  因为NaN与任何值都不相等,包括自己
  1. 布尔类型与其他类型相比较
  • 只要布尔类型参与比较,该布尔类型就会率先被转成数字类型
    -布尔类型true转为1,false转为``0
true == 1  // true
false == 0  // true
true == 2  // false
"" == false // true
"1" == true // true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值