Open felix-cao opened 2 years ago
JavaScript 是一种动态类型编程语言,对变量数据类型是宽容的,不需要显式的指出它的数据类型,变量的数据类型会在程序运行时自动确定,而且可以随时更改一个变量的数据类型, 这在静态类型编程语言是不可能的。
JavaScript
let v = "123"; // string v = 123; // number v = {}; // object
上面的代码变量 v 可以在光天化日下毫无忌惮的进行 string, number, object等各种数据类型之间进行转换。
v
string
number
object
同时JavaScript 还支持各种类型之间的隐式转换
let v = '100'; // string v /= 2; // number console.log(v);
上面的代码把字符串 100赋值给变量 v, 再对其进行 /= 运算赋值操作,v 会被隐式转换(Implicit Coercion)为 number 型。
100
/=
JavaScript 的 Boxing 和 Unboxing 也是一种类型转换。
JavaScript中共有六种 Primitive values, 其中 string, number, boolean, symbol, 都有一个包装对象(Wrapper)与之对应。
boolean
symbol
Wrapper
Boxing 就是指将 Primitive 类型的数据转换为对应的对象;
Boxing
Primitive
Unboxing 与之相反,即将包装对象转换为对应的`Primitive类型的数据
Unboxing
手动 Boxing, 即手动完成 Primitive values 到 包装类型的转换,这是一种显式转换
let v = 1; typeof v; // number v = new Number(1); // Primitive to Object typeof v; // object
let v = "100"; let v2 = v.length;
上面代码给 v 赋值一个字符串100, 再访问v 的length, 然后赋值给 v2;
length
v2
然而v是一个Primitive value, 在 JavaScript 中只有对象才有属性和方法 , 为什么 v 有 length 属性呢?
Primitive value
当访问基本类型的属性或方法时,JavaScript首先将其隐式转换为包装器对象,再访问其上的属性和方法。访问完包装器对象上的属性和方法后,将其丢弃。这就是 Auto-Boxing, 上面的代码可以理解为:
Auto-Boxing
let temp = new String("100"); let v2 = temp.length; temp = undefined
一、类型转换
JavaScript
是一种动态类型编程语言,对变量数据类型是宽容的,不需要显式的指出它的数据类型,变量的数据类型会在程序运行时自动确定,而且可以随时更改一个变量的数据类型, 这在静态类型编程语言是不可能的。上面的代码变量
v
可以在光天化日下毫无忌惮的进行string
,number
,object
等各种数据类型之间进行转换。同时
JavaScript
还支持各种类型之间的隐式转换上面的代码把字符串
100
赋值给变量v
, 再对其进行/=
运算赋值操作,v
会被隐式转换(Implicit Coercion)为number
型。二、Boxing and Unboxing
JavaScript
的 Boxing 和 Unboxing 也是一种类型转换。JavaScript
中共有六种 Primitive values, 其中string
,number
,boolean
,symbol
, 都有一个包装对象(Wrapper
)与之对应。Boxing
就是指将Primitive
类型的数据转换为对应的对象;Unboxing
与之相反,即将包装对象转换为对应的`Primitive类型的数据2.1、Manual Boxing
手动 Boxing, 即手动完成 Primitive values 到 包装类型的转换,这是一种显式转换
2.2、Auto-Boxing
上面代码给
v
赋值一个字符串100
, 再访问v
的length
, 然后赋值给v2
;然而
v
是一个Primitive value
, 在JavaScript
中只有对象才有属性和方法 , 为什么v
有length
属性呢?当访问基本类型的属性或方法时,
JavaScript
首先将其隐式转换为包装器对象,再访问其上的属性和方法。访问完包装器对象上的属性和方法后,将其丢弃。这就是Auto-Boxing
, 上面的代码可以理解为:Reference