抛出问题:
● 为什么有的编程规范要求用void 0 代替Undefined?
● 字符串有最大长度吗?
● 0.1+0.2不等于0.3吗?为什么js里面不是这样?
● es6中的Symbol是什么?
● 为什么给对象添加的方法能用在基本类型上
javascript规定了7种语言类型
其中最后一种Symbol是es6新增的
六种基本类型:
Number:数字
String:字符串
Boolean:true&fslse
Null:空,只有一个值,就是null表示空值,是关键字,可以放心使用null关键字来获取null值
Undefined:未定义
Symbol:独一无二的值
访问:基本数据类型的值是按值访问的
存储:基本类型的变量是存在堆内存里(stack)面
图解:
栈内存中包括了变量的标识符和变量的值
一种引用类型:
Object:对象
访问:引用类型的值是按照引用访问的
存储:引用类型的值是保存在堆内存(stack)中的对象(object)
图解:
堆内存中包含了变量的标识符和堆内存中指向该变量的对象
堆内存中包含了对象的内容
undefined、null
Q:为什么有的编程规范要求用void 0 代替Undefined?
javascript对象的未定义过的属性得到的值都是undefined
undefined类型表示未定义,它的类型只有一个值,就是undefined。任何变量在赋值前是undefined类型,值是undefined。一般可以用全局变量undefined来表达这个值,或者用void运算来把任意一个表达式值变为undefined。
但是,javascript里面的undefined是一个变量而不是关键字,这是javascript语言公认的失误之一,所以为了避免无意中被篡改,建议用void 0来获取undefined值。
null值类型也只有一个值,就是null,它的语义表示空值,与undefined不同,null是javascript的关键字,可以放心的使用null来获取null值。
Boolean
Boolean类型具有两个值,true和false,表示逻辑上的真和假,同样就具有两个关键字true和false来表示。
String
Q:字符串有最大长度吗?
String表示文本数据,String有最大长度2^53 - 1,这个所谓的最大长度,并不完全是我们理解中的字符数。因为String的意义并非“字符串”,而是字符串的UTF16编码,我们字符串的操作charAt、charCodeAt、length等方法针对的都是UTF16编码。所以字符串的最大长度,实际是受字符串的编码影响的。
注:现行的字符集国际标准,字符是以Unicode的方式表示的,每一个Unicode的码点表示一个字符,理论上,Unicode的范围是无限的。UTF是Unicode的编码方式,规定了码点在计算机中的表示方法,常见的有UTF16和UTF8。Unicode 的码点通常用 U+??? 来表示,其中 ??? 是十六进制的码点值。 0-65536(U+0000 - U+FFFF)的码点被称为基本字符区域(BMP)
JavaScript 字符串把每个 UTF16 单元当作一个字符来处理,所以处理非 BMP(超出 U+0000 - U+FFFF