JavaScript 数据类型分为两种,一种是基本数据类型:String、Number、Boolean、undefined 和 null,另外一种是复杂数据类型:Object。JavaScript 不支持任何建立自定义类型的机制,全部的值最终都将是上述六种数据类型之一。面试
首先,咱们了解一下基本数据类型。函数
1. String编码
JavaScript 采用 UTF-16 编码的 Unicode 字符集,JavaScript 中的字符串是由一组无符号的 16 位值组成的序列,最经常使用的 Unicode 字符都是经过 16 位的内码来表示的,并表明字符串中的单个字符spa
var p = 'π' var e = 'e' p.length // 1; p 包含一个 16 位值 e.length // e 经过 UTF-16 编码以后包含两个 16 位值:"\ud835\udc52"
只要引用了字符串的属性,JavaScript 就会将字符串值经过new String(s)的方式转换为对象,这个对象继承了字符串的方法,一旦引用结束,这个新建立的对象就会被销毁3d
var s = 'test' s.len = 4 var t = s.len // undifined 复制代码
第二行代码建立一个临时对象,并给这个对象的len属性赋值,随即销毁这个对象,第三行代码用的是原始的字符串值,他没有len属性,因此为undifined指针
在读取字符串的属性值时,表现的就像对象同样。但若是试图给属性赋值,则会忽略这个操做,修改只发生在临时对象身上,而这个临时对象并未保存下来code
这个临时对象称之为包装对象,字符串(还有数字和布尔值)的属性都是只读的,并不能赋值,有别于其余的对象对象
字符串是存放在堆内存里面的,一旦建立就不可更改,若是想改变某个变量保存的字符串,就必须先销毁原来的字符串,再用一个新的来填充该变量。继承
2. Numberip
在 JavaScript 里,全部与数字有关的都是 Number 类型,Number 类型又分为整数值和浮点数值,可是保存浮点数的内存空间是保存整数的内存空间的两倍,因此 JavaScript 固然不但愿在寸土寸金的内存空间里过多的存放浮点数,有下面两种状况会将浮点数转成整数:
- 小数点后面没有跟数字,好比 1.
- 小数点后面等于 0,好比 1.00
都会转成整数 1
在 Number 类型里还有一个值是 NaN(Not a Number),若是面试官问你该怎么判断一个变量是否是 NaN 呢?你固然不能答使用x == NaN,由于这个特殊的值与任何值都不相等,要想判断它还得使出真功夫。有如下两种方法能够判断:
- 使用x != x来判断,由于这货连本身都不认识,只要返回 true,那就证实 x 是 NaN 无疑了
- JavaScript 为咱们提供了函数isNaN()来方便咱们
任何类型的数据与 Number 类型的数据进行数学运算时都会被转成数字,不能转成数字的就是 NaN
3. Boolean
Boolean 类型没什么好说的,就两个值:true 和 false,可是须要注意的是在 JavaScript 中,类型转换为咱们提供了更多的可能性,如今就让咱们来简单了解一下其余数据类型转换成布尔类型。
数值类型 转换成布尔值 undefined false null false 布尔值 true/false 数字 +0、-0 和 NaN 是 false,其余是 true 字符串 空字符串是 false,其余是 true 对象 true
JavaScript 中的任何值均可以转换成布尔值,其中只有六个转换为 false
4. Undefined
Undefined 类型只有一个值 undefined,这个值用来表示已声明但未被赋值的变量。
5. Null
Null 也是只有一个值:null,用来表示空对象指针。
undefined 与 null 的区别一句话归纳:undefined 表示“缺乏值”,此处应该有值,可是还未定义;null 表示没有对象,此处不该该有值
typeof 操做符
了解基本数据类型的时候,就不得不来了解一下 typeof 操做符,它但是咱们判断基本数据类型的一个好帮手。
typeof 用来检测变量的数据类型,返回值一共有六个http://www.fuke029.com/
- 'number'
- 'string'
- 'boolean'
- 'object'
- 'undefined'
- 'function'
注意这六种都是字符串类型,若是咱们写typeof(typeof('123'))那么返回的是'string'
在 JavaScript 中,基本类型的值都是存放在栈内存中的,变量之间的赋值都是经过拷贝进行的,此后两个变量再参与任何操做的时候都不会相互影响
说完基本数据类型以后就是复杂类型了,复杂类型自己包含不少,后面我会针对每一种复杂类型进行详细讲述,欢迎关注让面试官另眼相看系列文章,若是有错或者更好的意见请指出,祝各位都能获得面试官的青睐,早日找到心仪工做!