JavaScript
运行时类型是代码实际执行过程中我们都用到的类型,所有的类型都属于7个类型之一。从变量,参数,返回值到表达式的中间结果,任何Javascript代码运行过程中产生的数据,都具有运行时类型~
类型:
JS语言的每一个值都属于一个数据类型。JS规定了7种语言类型,语言类型广泛用于变量,函数参数,表达式,函数返回值等场合。根据最新的语言标准,这7种语言类型是:
1、Undefined
2、Null
3、Boolean
4、String
5、Number
6、Symbol
7、Object
Undefined, Null
Undefined 表示未定义,它的类型只有一个值,就是Undefined。任何变量在附值前都是Undefined类型,值为undefined。一般我们可以用全局变量undefined 来表达这个值。或者用void运算把任意一个表达式变成Undefined值。
但是,JS的代码undefined是一个变量,并非一个关键字,这是Js语言公认的失误之一,所以我们为了避免无意中被篡改,我建议用void 0 来获取undefined值!
Undefined跟Null 有一定的表意差别,Null表示的是,定义了但是为空,所以在实际编程的时候,我们一般不会把变量赋值为undefined,这样可以保证所有值为undefined的变量,都是未赋值的自然状态。
Null类型也只有一个值,就是Null, 他的语义表示空值,与undefined不同,Null是JS关键字,在任何代码中都可以使用null 关键字来获取null值。
Boolean
String
String 用于表示文本数据,String最大长度是2^ 53–1,这所谓的最大长度,并不完全是你理解中的字符数。
因为String的意义并非“字符串”,而是字符串的UTF16编码,我们字符串的操作charAt, CharCodeAt, length等方法针对的都是UTF16编码。所以字符串最大长度受字符串编码长度影响。也就是说length并不是直接返回直觉上字符串的长度,而是返回在Unicode编码状态下编码码点的长度。
Note: 现在的字符国际标准,字符是以Unicode 表示的。每个Unicode的码点表示一个字符。理论上,Unicode的范围是无限的,UTF是Unicode 的编码方式,规定了码点在计算机中的表示方法,常见的有UTF16和UTF8。Unicode的码点通常用U+4个或者五个数字表示,其中数字以16进制表示。
0–65536的码点被称为基本字符区域,涵盖我们日常用的大部分字符(BMP)。
JS中的字符串永远无法变更,一旦字符串构造出来,无法用任何方式改变字符串的内容,所以字符串具有值的类型的特征。
(例如:var test=”string”;test[0]=”1";console.log(test) )
JS字符串把每个UTF16单元当作一个字符来处理,所以处理非BMP的字符的时候,你应该格外小心。(例如,对于超过这个范围的字符在JS中是两个长度的字符,比如一个emoji,如果使用charAt(0)访问,实际上只能访问到其中一部分。)
Number
JS的数字有一定的精度限制,JS 中的数字类型有18437736874454810627 (即 2⁶⁴-2⁵³+3) 个值。
JS中的Number类型基本符合双精度浮点数规则,但是JS为了表达几个额外的语言场景,规定了几种例外的情况:
1、NaN
2、Infinity
3、-Infinity
Js中有+0和-0, 在加法运算中他们没有区别,但是除法运算中需要格外注意。区分+0还是-0的方式,正是检测1/x是infinity还是-infinity。
var a = 123;console.log(a/-0)
-Infinity