一,javascript的变量有哪些?
(a)分为两种:基础类型和引用类型
基础类型目前有六种,分别是boolen, null, underfined, number, string, symbol, bigint
(b)除了以上的基础类型之外,其他就是引用了类型object
二,基础类型和引用的区别?
(1)他们在内存中的存储方式不同,基础类型储存的是值而引用类型储存的是指向内存中某个控件的指针
(2)基础类型赋值就是把值赋给另一个变量,而引用类型的赋值是赋值给原来变量的指针,所以当引用类型发生改变时只要是指向同一个指针的变量都会发生改变。
三,函数参数是对象时会发生什么问题?
函数参数是对象时,相当于是将对象的指针传递给了函数,如果在函数的内部改变了对象的值,外面对象的值也会发生改变,数组也是如此。
四,typeof和instanceof判断变量类型的区别?
(1)type对于基础类型除了null以外都可以显示正确的类型,对于数组和对象都会显示object,对于函数会显示function,对于null和object(这个可以是以前遗留的一个bug,现在的解释是null被认为object对象的一个占位符,从而解释了这一个矛盾)
(2)instanceof:主要是用来判断引用类型,它的原理是根据原型链来查找,一般用于判断对象是否是某个类或者子类的实例
五,有没有更好的判断变量类型的方法?
可以使用object.prototype.tostring.call(var),可以准确的判断某个变量的类型
六,Number(`123`)和new Number(`123`)有什么区别?
(1)Number(`123`)是一个转换函数,会尝试把参数转换为整数类型,而new Number(`123`)则不同,这是一个构造函数,他的结果实施例化出来的一个对象。
(2)同样的情况也适用 string和 new string : Bollen和new Bollen的情况