基础
数据类型
1.数据类型检有哪些
JS 数据类型有:数字(number)、字符串(string)、布尔(bool)、符号(symbol)、空(undefined)、空(null)、对象(object)、bigint
总结:“四基两空一对象”,还有一个是bigint是新增的。
Number:
- -0,正0、负0
- 无穷大 Infinity、正无穷大+Infinity、负无穷大-Infinity。
- 无法表达的数字 —— NaN,但是输入
NaN===NaN,会出现false。 Symbol: 生成一个全局唯一的值
2.数据类型检测方式有哪些,各自区别
- typeof: 一般用于判断值类型:
- typeof num, // number
- typeof str, // string
- typeof bool, // boolean
- typeof arr, // object
- typeof obj, // object
- typeof func, // function
- typeof und, // undefined
- typeof null, // object
- typeof date, // object
- typeof reg, // object
- typeof error // object
- instanceof: instanceof 运算符是用来判断一个对象是否在其原型链原型构造函 数的属性,一般用于比较对象引用类型
- Object.prototype.toString.call
3.null和undefined区别
undefined 表示一个变量自然的、最原始的状态值,而 null 则表示一个变量被人为的设置为空对象,而不是原始状态。所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined,当需要释放一个对象时,直接赋值为 null 即可
4.强制类型转换与隐式类型转换规则
5.object.is()
函数
this
this 是在调用时被绑定的,完全取决于函数的调用位置(箭头函数除外)
- 默认绑定:独立函数调用。可以把这条规则看作是无法应用其他规则时的默认规则,非严格模式下为window,严格模式下为undefined
- 隐式绑定: 作为对象方法调用时会将this绑定为该对象。
注意
1.对象属性引用链中只有最顶层或者说最后一层会影响调用位置。举例来说:
function foo() {
console.log( this.a );
}
var obj2 = {
a: 42,
foo: foo
};
var obj1 = {
a: 2,
obj2: obj2
};
obj1.obj2.foo(); // 42
2.隐式丢失:隐式绑定与函数是单独定义或者对象方法定义无关,只与此函数调用方式有关,如果采用对对象方法进行引用后再调用的方式则还是会触发默认绑定 举例来说:
function foo() {
console.log( this.a );
}
var obj = {
a: 2,
foo: foo
};
var bar = obj.foo; // 函数别名引用此方法!
var a = "oops, global"; // a 是全局对象的属性
bar(); // "oops, global"
如果把函数传入语言内置的函数而不是传入你自己声明的函数(比如setTimeout)结果是一样的,没有区别: