动画:《大前端吊打面试官系列》 之原生 JavaScript 精华篇( 三 )


面试官:== 和 === 的区别?
对于 === 来说,是严格意义上的相等,会比较两个操作符的类型和值 。
条件例子返回值
===
===
true
null === null
null === null
true
===

动画:《大前端吊打面试官系列》 之原生 JavaScript 精华篇

文章插图
(当字符串顺序和字符完全相等的时候返回 true,否则返回 false)
‘a’ === ‘a’
‘a’ === ‘aa’
true
false
===
true === true
true === false
true
false
===
相同的返回 true,
不相同的返回 false
===
① 其中一个为 NaN,返回 false
② X 和 Y 值相等,返回 true
③ 0 和 -0,返回 true
④ 其他返回 false
NaN ==== NaN
NaN === 1
3 === 3
+0 === -0
false
false
true
true
而对于 ==来说,是非严格意义上的相等,先判断两个操作符的类型是否相等,如果类型不同,则先进行类型转换,然后再判断值是否相等 。
条件例子返回值
null ==
null ==
true
== , 转
‘2’ == 2
true
== , 转
true == 1
true
== ,,,将转化为原始类型再比较值大小
[1] == 1
[1] == ‘1’
true
true
其他返回 false
false
this
面试官:什么是 this 指针?以及各种情况下的 this 指向问题 。
this就是一个对象 。不同情况下 this指向的不同,有以下几种情况,(希望各位亲自测试一下,这样会更容易弄懂):
var obj = {name:'小鹿',age: '21',print: function(){console.log(this)console.log(this.name + ':' + this.age)}}// 通过对象的方式调用函数obj.print();// this 指向 obj
function print(){console.log(this);}// 全局调用函数print();// this 指向 window
function Person(name, age){this.name = name;this.age = age;console.log(this);}var xiaolu = new Person('小鹿',22);// this = > xaiolu
由于箭头函数没有单独的 this值 。箭头函数的 this与声明所在的上下文相同 。也就是说调用箭头函数的时候,不会隐士的调用 this参数,而是从定义时的函数继承上下文 。
const obj = {a:()=>{console.log(this);}}// 对象调用箭头函数obj.a(); // window
面试官:如何改变 this 的指向?
我们可以通过调用函数的 call、apply、bind 来改变 this的指向 。
var obj = {name:'小鹿',age:'22',adress:'小鹿动画学编程'}function print(){console.log(this);// 打印 this 的指向console.log(arguments);// 打印传递的参数}// 通过 call 改变 this 指向print.call(obj,1,2,3);// 通过 apply 改变 this 指向print.apply(obj,[1,2,3]);// 通过 bind 改变 this 的指向let fn = print.bind(obj,1,2,3);fn();
对于基本的使用想必各位小伙伴都能掌握,俺就不多废话,再说一说这三者的共同点和不同点 。
共同点:
不同点:
扩展:如果我们使用上边的方法改变箭头函数的 this 指针,会发生什么情况呢?能否进行改变呢?
由于箭头函数没有自己的 this 指针,通过 call() 或 apply() 方法调用一个函数时,只能传递参数(不能绑定 this),他们的第一个参数会被忽略 。
new
对于 new 关键字,我们第一想到的就是在面向对象中 new 一个实例对象,但是在 JS 中的 new 和 Java 中的 new 的机制不一样 。