js隐式类型转换

1,041 阅读5分钟

六种类型 String 字符串 Number 数值 Boolean 布尔值 Null 空值 undefined 未定义 Object 对象

前五位为基本数据类型,Object为引用数据类型

1、首先来看一下typeof

typeof 运算符返回一个用来表示表达式的数据类型的字符串。

typeof 可以返回的类型为:number、string、boolean、undefined、null、object、function 还有新的symbol(详见MDN) 附上网址

developer.mozilla.org/zh-CN/docs/…

常用返回值

image.png


//当前的浏览器为chrome浏览器;

var num = null ;
console.log(typeof num);//object
 
 
var num = /s/ ;
console.log(typeof num);//object
 
 
var num = "a" ;// "123"
console.log(typeof num);//string
 
 
var num = a; 
console.log(typeof (num));//报错
 
 
var num = 123 ;
console.log(typeof num);//number
 
 
var num = NaN;
console.log(typeof num);//number
 
 
var num = undefined ;
console.log(typeof num);//undefined
 
 
var num;
console.log(typeof num);//undefined
 
 
var num =[1,3];
console.log(typeof num);//object
 
 
var num = true;
console.log(typeof num);//boolean
 
 
var num = new Array();
console.log(typeof num);//object
 
 
var num =function(){};
//var num =function;会报错
console.log(typeof num);//function
 
 
var num =new Object();
console.log(typeof num);//object
 
 
function Kkb(name){
    this.name =name;
 }
var num = new Kkb();
console.log(typeof num);//object
 
 
function Kkb(name){
    this.name =name;
}
var num = new Person();
console.log(typeof num.name);//undefined
 
 
  function Kkb(name){
   this.name =name;
 }
var num = new Kkb("hello");
//var num = new Person(123);-->number
console.log(typeof num.name);//string

2、强制转换

  • 就是指将一个数据类型强制转换为其他数据类型

  • 类型转换主要指,将其他的数据类型。转换为String、Number、Boolean

  • 2.1转换为String

    • toString() a、调用被转换数据类型的toString()方法;

    b、该方法不会影响原变量,它会将转换结果返回;

    c、注意:null和undefined这两个值没有toString()方法,调用会报错

    • String() a、调用String()函数,并将被装换的数据作为参数传递给函数;

    b、该方法不会影响原变量,它会将转换结果返回;

    c、使用String()函数做强制类型转换时,null和undefined这两个值可以转换为String;

    d、对于Number、Boolean实际上就是调用toString()方法;null和undefined,不会调用toString()方法,而是直接转换成“null”、“undefined”;

  • 2.2转换为Nuber

    • Number()

    a、如果是纯数字的字符串,直接转换为数字;

    b、如果字符串中有非数字的内容或者是undefined,则转换成NaN

    c、如果字符串是空串或者空格,则转换成0

    d、如果是布尔值;true转换为1,false转换为0;

    e、如果是Null,转换为0

    • parseInt() / parseFloat()

    a、parseInt() 把一个字符串转换为一个整数

    b、parseInt()转换规则:从左往右依次读取,把有效的整数内容取出来,遇到第一个非数字 内容就停止读取,如果第一个字符就是非数字则转换为NaN; c、parseFloat() 把一个字符串转换为一个浮点数,和parseInt()类似,不同的是可以获取有效的一个小数;

     var a = '111.1111.11' 
     var b = kkb111.11
     parseFloat(a)  // 111.111
     parseFloat(b) // NaN
    

    parseInt()或parseFloat(),对非String使用,它会先将其转换为String,然后 再操作;

  • 2.3转换为Boolean

    • Boolean() a、数字转布尔值,除了0和NaN都是true;

    b、字符串转为布尔值,除了空串都是true;

    c、null和undefined转换为布尔值,都是false;

    d、对象也会转换为true;

  var KKB=100;
  var KKBS='100';
  console.log(typeof KKB);            //number
  console.log(typeof KKB);           //string  
  console.log(typeof String(KKB));    //string
  console.log(typeof Number(KKBS));   //number

3、隐式转换

1、转换为String

算法运算符(+), 任何值和字符串做 + 时,都会先转换为字符串,然后再和字符串做拼串操作;多个值 + 时 ,从左向右运算,注意数值类型;

可以利用这一特点,来将任意数据类型转换为String,只需(任意字符串 + “”)即可转换为String;这是一种隐式类型转换,由浏览器自动完成,实际上也是调用了String()函数;

2、转换为Number

算法运算符(- * / %),任何值做 - * /,都会将其转换为Number,再做运算;可以利用这一特点,来将任意数据类型转换为Number,只需(任意字符串 - 0)(任意字符串 * 1)(任意字符串 / 1)即可转换为Number,这是一种隐式类型转换,由浏览器自动完成,实际上也是调用了Number()函数;

一元运算符(+(正号) ),对于非Number类型的值,它会先转换为Number,然后再运算;可以对一个其他数据类型使用+,来将其装换为number,隐式类型转换,它的原理和Number()函数一样;

3、转换为Boolean

逻辑计算符(!非),! 对一个布尔值做取反运算;如果对非布尔值取反,则会将其转换为布尔值,再取反;可以利用其特点,将其他数据类型取两次反,转换为布尔值;原理和Boolean()一样;

4、字符串加数字,数字就会转成字符串。

5、数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。

6、乘,除,大于,小于跟减的转换也是一样。

```
console.log(1+'2') //12 string
console.log(1-'2')//-1 number
console.log(10-'kkb') //NaN 
console.log(10-'10a') //NaN
console.log(10*'20') //200 number
console.log('10'*'20') //200 number
console.log(2/'1') //2 number
console.log('2'/'1') //2 number
console.log('2'/'kkb') //NaN

```

7、 ==时候也会进行隐式转换()

a.undefined等于null

b.字符串和数字比较时,字符串转数字

c.数字为布尔比较时,布尔转数字

d.字符串和布尔比较时,两者转数字
 ```
console.log(undefined==null) //true
console.log('0'==0) //true 字符串转数字
console.log(0==false) //true 布尔转数字
console.log('0'==false) //2个都转成数字
console.log(null==false) //false
console.log(undefined==false)//false
 ```

好啦,就先到这里吧,分享是一种美德,嘿嘿!