JavaScript学习笔记0_1数据类型和类型转换

数据类型

JavaScript类型分为基本类型(原始类型)和引用类型(对象类型)两类。

基本类型(原始类型)

JavaScript基本类型包括数字、字符串、布尔值、null和undefined。JavaScript学习笔记1_null和undefined传送门!

引用类型(对象类型)

JavaScript中除数字、字符串、布尔值、null和undefined之外的都是引用类型(对象类型),主要包括对象、数组和函数。JavaScript

类型转换

转换规则见下表:

转换为:
字符串 数字 布尔值 对象
undefined "undefined" NaN false throws TypeError
null "null" 0 false throws TypeError
true "true" 1 new Boolean(true)
false "false" 0 new Boolean(false)
""(空字符串) 0 false new String("")
"1"(非空数字) 1 true new String("1")
"one"(非空字符) NaN true new String("one")
0 "0" false new Number(0)
-0 "0" false new Number(-0)
NaN "NaN" false new Number(NaN)
Infinity "Infinity" true new Number(Infinity)
-Infinity "-Infinity" true new Number(-Infinity)
1(非0数字) "1" true new Number(1)
{}(任意对象) 参考转为字符串或数字 参考转为字符串或数字 true
[](空数组) "" 0 true
[1](1个数字元素) '1' 1 true
['a'](非数字元素) 使用join()方法 NaN true
function(){}(任意函数) 参考转为字符串或数字 NaN true

注意:使用Object()函数将null或undefined转换为对象不会抛出异常,仅会返回一个新建的空对象{}。

Object(undefined)   // {}
Object(null)        // {}

显示类型转换

  • 使用Number()、Boolean()、String()或Object()函数(不通过new关键字调用这些函数)进行显示类型转换。
  • 转换为Boolean时:仅""、null、undefined、0、NaN、false会转换为false,其他任何值都转换为true。
Number("2")     // 2
Number("a12b")  // NaN
Number("12a")   // NaN
Number(true)    // 1
String(false)   // "false"
Boolean("false") // true 仅""、null、undefined、0、NaN、false会转换为false,其他都转换为true
Object(3)       // 等价于new Number(3)

对象转换为原始值

转为Boolean

任何对象(包括数组和函数)在转为布尔值时都为ture,new Boolean(false)对象在转换时也为true。

转为字符串或数字

数组转换为字符串或数字参考上面的表格

  1. 除了null和undefined以为的任何值都具有toString(),这个方法的执行结果通常和String()方法的返回结果一致。
  2. 对象在转换为String时,是通过调用待转换对象的一个方法来完成的。
  3. 所有的对象都继承了toString和valueOf方法。通过这两个方法,我们可以完成对象到字符串或数字的转换。
  • toString方法返回字符串,我们可以通过重写该方法,使之返回比较有意义的信息。
  • valueOf方法一般只是简单的返回对象本身。日期类Date的valueOf返回1970/1/1以来的毫秒数。

转为字符串的步骤

  1. 如果对象具有toString方法,则自动调用该方法。如果该方法返回原始值,JavaScript会将这个值转换为字符串(返回值可以是非字符串),并返回这个字符串。转换为字符串的规则可以参照上面的表格
  2. 如果没有toString方法,或toString的返回值不是原始值,那么JavaScript会调用valueOf方法,如果valueOf方法返回原始值,JavaScript会将该值转换为字符串并返回。
  3. 如果toString和valueOf方法都没有返回原始值,这时会抛出类型转换异常。

转为数字

在对象转为数字的过程中,JavaScript做了同样的事情,只是会先调用valueOf方法。

  1. 如果对象具有valueOf方法,该方法返回原始值,则将原始值转换为数字并返回。
  2. 如果没有valueOf方法或返回值不是原始值,则调用toString方法,如果同String方法返回一个原始值,则转换为数字返回。
  3. 如果toString和valueOf方法都没有返回原始值,这时会抛出类型转换异常。
  • 原始值:基本类型。
  • 非原始值:引用类型。
var o = { // 都返回原始值
    toString: function() {return 1;},
    valueOf: function() {return 2;}
}
'' + o   // '1'
0 + o   // 2

var o = {
    toString: function() {return true;},
    valueOf: function() {return {};}
}
'' + o   // 'true'
0 + o   // 1   valueOf返回{}非原始值,因此调用toString,返回true,true转为数字为1

var o = {
    toString: function() {return [1,2,3];},
    valueOf: function() {return {};}
}
'' + o   // TypeError: Cannot convert object to primitive value
0 + o   // TypeError: Cannot convert object to primitive value

你可能感兴趣的:(JavaScript学习笔记0_1数据类型和类型转换)