js
1.typeof运算符和instanceof运算符以及isPrototypeOf()方法的区别
typeof是一个运算符,用于检测数据
typeof array object null的值都是object
var a = true;
var b = 1;
var c = 'dsfdsf';
var d = undefined;
var e = [1, 2, 3, 4];
var f = {
name: 'zs',
age: 12
}
var g = null;
var h = function () {
console.log('you are right');
}
console.log(typeof a);//boolean
console.log(typeof b);//number
console.log(typeof c);//string
console.log(typeof d);//undefined
console.log(typeof e);//object
console.log(typeof f);//object
console.log(typeof g);//object
console.log(typeof h);//function
instanceof
用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上(能够很好的 区分引用类型) 判断是否是Array就行
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);
console.log(auto instanceof Car);
isPrototypeOf用于测试一个对象是否存在于另一个对象的原型链上。
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);
Object.prototype.isPrototypeOf(auto)
2.call()和apply()和bind()的异同
apply,call,bind
apply() 方法接收两个参数: 第一个是要设置为 this 的那个对象, 第二个参数是可选的,如果要传入参 数, 则封装为数组作为 apply() 的第二个参数即可。
call() 方法 和 apply() 基本上是一样的, 除了后面的参数不是数组, 而是分散开一个一个地附加在后 面
bind也是分散的传参数,但是bind绑定后,就不能在改变this的指向
除此之外,bind不会调用该函数,会返回一个改变this的新函数,
而apply call则会直接调用该函数
var num = 10;
function test() {
return this.num;
}
var obj = {
num:5,
fun:test
}
console.log(obj.fun.call(this));//这里的this是window 10
var x = obj.fun.bind(obj);
console.log(x())//5
console.log(x.apply(this));//5 通过bind绑定后,不能在改变this指向
3.eval() 函数
eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。
eval()只有一个参数,
如果传入的参数不是字符串,它直接返回这个参数。
如果参数是字符串,它会把字符串当成javascript代码进行编译。
如果编译失败则抛出一个语法错误(syntaxError)异常。
如果编译成功,则开始执行这段代码,并返回字符串中的最后一个表达式或语句的值,
如果最后一个表达式或语句没有值,则最终返回undefined。
如果字符串抛出一个异常,这个异常将把该调用传递给eval()。
4、描述以下变量的区别:null,undefined或undeclared
null表示"没有对象",即该处不应该有值,转为数值时为0。典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
undefined 表示"缺少值",就是此处应该有一个值,但是还没有定义,转为数值时为NaN。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
undeclared :js语法错误,没有申明直接使用,js无法找到对应的上下文。
5、== 和 ===有什么区别
=== (恒等)要求数值和类型都完全相等
== 要求数值相等就行(他会先比较是否恒等,不想等的话,进行隐式类型转换,然后接着判断是否相等)
6、同步异步?
1、进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事
2、异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者
常见的异步操作:定时器,回调函数,发送请求,setState()