那些陌生又熟悉的前端面试问题
JavaScript语言是弱类型语言,有很多类型错误,所以ES6引入了严格模式的概念。
如果不加‘使用严格’,正常模式就是非严格模式。
严格模式
在js文件顶部添加' use strict '属于严格模式,在函数内部也可以指定严格模式。
严格模式为js定义了不同的解析和执行模型。在严格模式下,ECMAScipt 3中一些令人费解的不确定的行为会被处理,对于不安全的操作会抛出异常。“使用严格”将告诉浏览器引擎它可以切换到严格模式。
严格模式和非严格模式的区别
常见测试问题:
试试这个测试。你能做到吗?
要说js的深度复制,就不得不提js的两种数据类型:基本数据类型和引用类型。
基本数据类型的变量名和值存储在堆栈中,引用类型的变量名存储在堆栈中,值存储在堆中。由于存储方式不同,它们的复制方式也不同。
估价
当给基本数据类型赋值时,创建的基本数据类型会在内存中开辟一个新的空间来复制值,而引用类型使用地址存储。如果一个引用数据直接赋给另一个数据,就相当于直接把它存储值的地址给了另一个变量,所以改变一个的值也会改变另一个的值。
暗抄的定义是什么?
假设有两个变量,P和copyP。如果copyP复制了P,我们可以通过修改copyP来观察P是否发生了变化。如果随它而变,那就是浅薄的复制。如果没有变化,则表示深度复制。
复制一个基本类型的时候,会打开新的内存空间,所以两个值是相互独立的。复制引用类型时,取决于它是复制的内存地址还是新堆。所以深度复制主要是针对引用类型的数据。
浅层复制的常见方式:
1,直接分配
2、对象分配
深度复制的常见方式:
引用数据最常用的类型是对象和数组,引用数据内部的数据也可以多样化。在进行深度复制时,也要根据数据结构进行合适的复制方法。具体的深层拷贝方法如下:
1,数组只包含基本数据类型。
2.该对象只包含基本数据类型。
3.当对象或数组包含一个或多个引用数据类型时。
深拷贝和浅拷贝的常见应用主要是增加、删除和修改数据的操作。
大昌笔测试题:
这是一个关于这一点的面试问题。接下来,我们来说说这是怎么分的。
该对象由基于运行时函数的执行环境绑定:
看了上面的解释,就可以做上面的面试题了。
如何改变这个方向?
Call、bind、apply都是用来改变这个指向的,也就是改变函数执行时的上下文。
修改以上面试问题:
调用、绑定、应用改变了这个方向,最大的作用就是实现代码复用。
至于调用、绑定、应用的区别,你可以自己去发现。
有了上面的手表,事情就变得简单了!
关系运算符运算时,不同类型的值会自动转换成同一类型的值,然后
1.当一边是字符串,另一边是数字时,字符串调用Number方法将字符串转换为数字,所以:
2.如果两边都是字符串,则根据字符串的unicode编码进行转换,因此:
3.比较字符串条目时,先比较第一位。如果不相等,则直接得到结果。如果第一项相等,第二项将继续用于比较。
4.转换为布尔值时全部为假的类型有:undefined、null、0、NaN、false和“”
5.NaN代表一个非数,但这个非数也是不一样的,所以NaN不等于NaN,两个NaN永远不可能相等。
6.关系运算有一个数值,另一个值也转换成数字类型。
7.如果有逻辑运算,就把其他数据类型转换成布尔值。
8.直接比较两个空数组。数组地址不同,所以不相等。
评论区可以留下最近想学的知识点,或者面试题型!