17. 解释一下JS的展开操作符?
展开运算符在需要多个参数/变量/元素的位置展开表达式,它用三个点(…)。 如:
var mid = [3, 4];
var newarray = [1, 2, ...mid, 5, 6];
console.log(newarray); // [1, 2, 3, 4, 5, 6]
18. JS中的宿主对象与原生对象有何不同?
宿主对象象:这些是运行环境提供的对象。这意味着它们在不同的环境下是不同 的。例如,浏览器包含像windows这样的对象,但是Node.js环境提供像 Node List这样的对象。
原生对象:这些是JS中的内置对象。它们也被称为全局对象,因为如果使用JS, 内置对象不受是运行环境影响。
19. 解释JS中的高阶函数?
高阶函数是JS函数式编程的最佳特性。它是以函数为参数并返回函数作为结果 的函数。一些内置的高阶函数是map、filter、reduce 等等。
20. JS 中 == 和 === 区别是什么?
- 对于string,number等基础类型,== 和 ===有区别
1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等, ===如果类型不同,其结果就是不等。
2)同类型比较,直接进行“值”比较,两者结果一样。 - 对于Array,Object等高级类型,== 和===没有区别进行“指针地址”比较。
- 基础类型与高级类型,和=有区别
1)对于==,将高级转化为基础类型,进行“值”比较。
2)因为类型不同,===结果为false
21. JS中的匿名函数是什么?
匿名函数:就是没有函数名的函数,如:
(function(x, y){
alert(x + y);
})(2, 3);
这里创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数, 并传入参数。
22. 是否可以在JS中执行301重定向?
JS完全运行在客户端上。301是服务器作为响应发送的响应代码。因此,在JS 中不可能执行301重定向。
23. 解释JS中的事件冒泡和事件捕获
事件捕获和冒泡: 在html DOM API中,有两种事件传播方法,它们决定了接收 事件的顺序。两种方法是事件冒泡和事件捕获。第一个方法事件冒泡将事件指向 其预期的目标,第二个方法称为事件捕获,其中事件向下到达元素。
事件捕获捕获过程很少被使用,但是当它被使用时,它被证明是非常有用的。这个过程也 称为滴流模式。在这个过程中,事件首先由最外层的元素捕获,然后传播到最内 部的元素。
例如:
<div>
<ul>
<li></li>
</ul>
</div>
从上面的示例中,假设单击事件发生在li元素中,在这种情况下,捕获事件将首 先处理div,然后处理ul,最后命中目标元素li。
事件冒泡
冒泡的工作原理与冒泡类似,事件由最内部的元素处理,然后传播到外部元素。
<div>
<ul>
<li></li>
</ul>
</div>
从上面的例子中,假设click事件确实发生在冒泡模型中的li元素中,该事件将首 先由li处理,然后由ul处理,最后由div元素处理。
23. 如何将文件的所有导出作为一个对象?
import * as objectname from ‘./file.js’用于将所有导出的成员导入为对 象。 可以使用对象的点(.)运算符来访问导出的变量或方法,如:
objectname.member1;
objectname.member2;
objectname.memberfunc();
24. 解释一下什么是箭头函数?
箭头函数是在es6或更高版本中编写函数表达式的简明方法。箭头函数不能用作 构造函数,也不支持this,arguments,super或new.target关键字,它最适 合非方法函数。 通常,箭头函数看起来像 const function_name =()=> {}。
const greet=()=>{console.log('hello');} greet();
25. 解释 JS 中的函数提升
JS允许将声明移动到顶部的默认行为称为提升。JS中创建函数的两种方法是函 数声明和函数表达式。
函数声明
具有特定参数的函数称为函数声明,在JS中创建变量称为声明。如:
hoisted(); // logs
"foo" function hoisted()
{ console.log('foo');
}
函数表达式
当使用表达式创建函数时,称为函数表达式。如:
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function() { console.log('bar'); };
26. module.exports 和 exports 之间有什么区别?
module和exports是Node.js给每个js文件内置的两个对象。可以通过 console.log(module)和console.log(exports)打印出来。如果你在main.js 中写入下面两行,然后运行$ node main.js:
console.log(exports);//输出:{}
console.log(module);//输出:Module {..., exports: {}, ...}
(注:...代表省略了其他一些属性)
从打印咱们可以看出,module.exports和exports一开始都是一个空对象{}, 实际上,这两个对象指向同一块内存。这也就是说module.exports和exports 是等价的(有个前提:不去改变它们指向的内存地址)。
例如:exports.age = 18和module.export.age = 18,这两种写法是一致的 (都相当于给最初的空对象{}添加了一个属性,通过require得到的就是{age: 18})
27. import 和 exports 是什么?
import和exports 帮助咱们编写模块化的JS代码。使用import和exports,咱 们可以将代码分割成多个文件。import只允许获取文件的某些特定变量或方 法。可以导入模块导出的方法或变量。
//index.js
import name,age from './person';
console.log(name);
console.log(age);
//person.js
let name ='Sharad',
occupation='developer',
age =26; export { name, age};
28. 列出一些单元测试框架
下面是一些最流行的JS单元测试框架:
Unit.js
Jasmine
Karma
Chai
AVA
Mocha
JSUnit
QUnit
Jest
29. JS中有哪些不同类型的弹出框可用
在JS中有三种类型的弹出框可用,分别是:
Alert
Confirm
Prompt
30. 如何将 JS 日期转换为ISO标准
**toISOString()**方法用于将js日期转换为ISO标准。 它使用ISO标准将js Date对象转换为字符串。如:
var date = new Date();
var n = date.toISOString();
console.log(n);
// YYYYMMDDTHH:mm:ss.sssZ
31. 如何在JS中克隆对象
Object.assign() 方法用于在JS中克隆对象。如:
var x = {myProp: "value"};
var y = Object.assign({}, x);
32. 如何在JS中编码和解码 URL
encodeURI() 函数用于在JS中对URL进行编码。它将url字符串作为参数并返 回编码的字符串。
注意: encodeURI()不会编码类似这样字符: / ? : @ & = + $ #,如果需 要编码这些字符,请使用encodeURIComponent()。
用法:
var uri = "my profile.php?name=sammer&occupation=pāntiNG";
var encoded_uri = encodeURI(uri);
decodeURI() 函数用于解码js中的URL。它将编码的url字符串作为参数并返 回已解码的字符串,用法:
var uri = "my profile.php?name=sammer&occupation=pāntiNG"; var encoded_uri = encodeURI(uri); decodeURI(encoded_uri);