JavaScript类型:
- JavaScript的基本类型:
传送门 - JavaScript的原始类型:
传送门 - 原始类型和复杂类型的区别:
首先说一下类型和数据结构的关系,类型是让编译器(或者解释器)识别的,作用是让编译器明白当前的指针(或者是变量)的容量,这时候cpu如果需要使用该变量时才知道该变量(或者是指针)代表多少内存单元。
那么JavaScript是如何判断类型的呢?
关于Object(很多人认为这个是复杂类型),明确的说object不是类型,是数据结构。举个例子,你可以动态的访问属性如a[b] (a,b均为变量,这里我感觉属性访问器反而是语法糖)。在其他编译型语言中对象的属性是无法动态访问的(貌似Java的反射可以,不过这也是编译器将类型名放入对象的内存中),他的底层相当于用malloc开辟一段空间,里面存储的key就是字符串(好像也可以是symbol,为了避免冲突?),而value可以是指针(算上null和string吧,毕竟string中实际上放的还是指针,只是某个连续的字符串。)、number,boolean(感觉就是0和1),
类型推导传送门
typeof和instanceof的作用和区别
typeof 作用,用于判断值为什么类型,其返回结果为number、string、boolean、object、undefined、function(以上均为字符串)。instanceof 用于判断一个变量是否某个构造函数的实例(或者是es6中的class)的实例,其返回一个boolean值,true或false,其实说白了就是判断其原型链上的constructor指针是否相等。
如何判断一个变量是否是数字、字符串、布尔、函数
var a;
typeof(a)==='number' 判断是否为数字,返回true,即为数字
typeof(a)==='string' 判断是否为字符串
typeof(a)==='boolean' 判断是否为字符串
typeof(a)==='function' 判断是否为函数。
NaN是什么? 有什么特别之处?
NAN 意思是不是一个数字,NaN===NaN 为false,和其他任何值都不相等,因为nan不是具体的,不知道自己代表什么,所以没法和其他任何值相等。
break与continue有什么区别
break;跳出循环,强制退出循环体,执行循环后面的代码。continue:退出本次循环,继续执行下次循环。
void 0 和 undefined在使用场景上有什么区别
void 会执行后面的表达式并返回 undefined,有时undefined是可以被赋值的,比如在函数中,这时就不能用undefined来进行判断了。所以用void 0返回undefined来进行判断。