7.1 前端面试题第一天

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值