检测数据类型4种方法
-
typeof
:
typeof
可以得到的值: number、string、undefined、boolean、object、function。
直接通过typeof
判断的类型:number、string、undefined、boolean、function。 -
A instanceof B
:判断B在不在A的原型链上 (一般不会判断数据类型)。 -
===
:因为null和undefined类型都是只有 唯一的值 所以可以通过===
来判断null和undefined类型。 -
Object.prototype.toString()
:Object.prototype.toString.call(arr).slice(8,-1).toLowerCase();
谈一谈 this
-
什么是this?
- 一个关键字,是一个引用变量。
- 函数中可以出现 this(全局的 this 指向 window)。
- this 指向其所在函数的调用者,如果没有调用者则指向 window。
- this 的指向是在调用函数的时候确定的。
-
this 指向(其实就是看函数的调用方式)
- this 默认绑定(函数默认调用)。
- this 指向调用函数的上下文(函数是上下文调用的)。
- 注意隐式丢失现象 (通过一个上下文对象拿到了一个函数,但是没有调用,而是赋值给了其他人)。
- this 指向实例化对象(函数实例化调用)。
- 强制绑定,this 指向call、apply、bind修改的对象(函数是call、apply、bind调用的)。
谈一谈call()、apply()、bind()
call()
- 在使用一个指定的 this 值 和 指定的若干个参数的前提下 调用了某个函数。
- 作用:
- 调用函数 。
- 改变函数的上下文(this指向)。
- fn.call(thisArg,arg1,arg2,arg3,…):
thisArg
就是指定的 this 值。- 如果
fn
需要参数,则依次在 call 的第二个参数开始传参。
- 执行的 this 值可能性:
- null 和 undefined:把 this 指向 window。
- 基本类型值:把 this 指向当前值的包装对象。
- 对象类型:把 this 指向当前对象。
apply()
语法与 call() 方法的语法几乎完全相同,唯一的区别在于,apply 的第二个参数必须是一个包含多个参数的数组(或类数组对象)。
bind()
- bind 语法和 call 一样。
- 但是 bind 并不会去调用函数,而是改变了函数的 this 执行,并返回改变 this 指向后的函数。
谈一谈回调函数
- 函数是我们自己声明的。
- 我们没有主动调用它(加小括号调用)。
- 但是最后却执行了。
- 常见回调函数:计时器 事件函数 ajax 回调函数。
分析点操作符和中括号操作符
访问和设置对象内部的数据:
-
点操作符:
- 成员访问,读取会自动把点操作符后边的内容读成字符串格式。
obj.fn
: 会把 fn 读成字符串 不可能把 fn 当作一个变量。
-
中括号操作符:
- 中括号操作符里边可以书写变量 也可以书写字符串,如果是变量就会解析成字符串。
obj[fn]
: 把 fn 当作一个变量,先读取 fn 变量代表的值 然后再获取 obj 的这个属性。obj['fn']
: 直接读取 obj 的 fn 属性。
-
什么时候用
中括号
和点
:- 一般来说都使用点操作符,特殊情况下用中括号。
- 特殊情况:
- key是一个变量
obj[a]
。 - key是非法字符
obj["my-name"]
。
- key是一个变量