1.JS中letconst有什么用?

在古代js中,letconst是创立变量的不同形式。 在晚期的js中,咱们应用var关键字来创立变量。 letconst关键字是在ES6版本中引入的,上面咱们来看下var let const 的区别:

var申明变量存在变量晋升,let和const不存在变量晋升

console.log(a); // undefined  ===>  a已申明还没赋值,默认失去undefined值var a = 1;console.log(b); // 报错:b is not defined  ===> 找不到b这个变量let b = 2;console.log(c); // 报错:c is not defined  ===> 找不到c这个变量const c = 3;

let、const属于块级作用域
顾名思义,就是只在以后代码块起作用,let和const区别:const用来申明一个只读的常量, 一旦申明,常量的值不可扭转,申明时必须设置初始化值,否则会报错

块级作用域的长处
1、防止内层变量笼罩外层变量
2、防止用来计数的循环变量泄露为全局变量
3、引入了块级作用域,容许在块级作用域之中申明函数

2. module.exports 和 exports 之间有什么区别?

moduleexportsNode.js给每个js文件内置的两个对象。能够通过console.log(module)console.log(exports)打印进去。如果你在main.js中写入上面两行,而后运行$ node main.js:

console.log(exports);//输入:{}console.log(module);//输入:Module {..., exports: {}, ...} (注:...代表省略了其余一些属性) 

从打印咱们能够看出,module.exportsexports一开始都是一个空对象{},实际上,这两个对象指向同一块内存。这也就是说module.exportsexports是等价的(有个前提:不去扭转它们指向的内存地址)。

例如:exports.age = 18module.export.age = 18,这两种写法是统一的(都相当于给最后的空对象{}增加了一个属性,通过require失去的就是{age: 18})。

3. JS 中 == 和 === 区别是什么?

1、对于string,number等根底类型,=====有区别

1)不同类型间比拟,==之比拟“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其后果就是不等。
2)同类型比拟,间接进行“值”比拟,两者后果一样。

2、对于Array,Object等高级类型,=====没有区别

进行“指针地址”比拟。

3、根底类型与高级类型,=====有区别

1)对于==,将高级转化为根底类型,进行“值”比拟。
2)因为类型不同,===后果为false

4.在 JS 中应用document.getElementsByClassName() 办法来获取具备类名的元素。

5. 解释一下 "use strict" ?

“use strict”是ES5中引入的js指令。 应用“use strict”指令的目标是强制执行严格模式下的代码。 在严格模式下,咱们不能在不申明变量的状况下应用变量。 晚期版本的js疏忽了“use strict”

6.用纯JS编写一个程序来反转字符串

应用内置函数:内置函数reverse()间接反转字符串。

str="jQuery";str = str.split("")//将字符串拆分成数组str = str.reverse()//反转数组str = str.join("")//将字符连接成字符串alert(str); 

7.JS中如何将页面重定向到另一个页面?

  1. 应用 location.href:window.location.href =“https://www.onlineinterviewquestions.com/”
  2. 应用 location.replace: window.location.replace(" https://www.onlineinterviewquestions.com/;");

8. JS中的substr()substring()函数有什么区别

substr() 函数的模式为substr(startIndex,length)。 它从startIndex返回子字符串并返回'length'个字符数。

var s = "hello";( s.substr(1,4) == "ello" ) // true 

substring() 函数的模式为substring(startIndex,endIndex)。 它返回从startIndexendIndex - 1的子字符串。

var s = "hello";( s.substring(1,4) == "ell" ) // true 

9. JS中的Array.splice()Array.slice()办法有什么区别

话不多说,来看第一个例子:

var arr=[0,1,2,3,4,5,6,7,8,9];//设置一个数组console.log(arr.slice(2,7));//2,3,4,5,6console.log(arr.splice(2,7));//2,3,4,5,6,7,8//由此咱们简略揣测数量两个函数参数的意义,slice(start,end)第一个参数示意开始地位,第二个示意截取到的地位(不蕴含该地位)splice(start,length)第一个参数开始地位,第二个参数截取长度 

接着看第二个:

var x=y=[0,1,2,3,4,5,6,7,8,9]console.log(x.slice(2,5));//2,3,4console.log(x);[0,1,2,3,4,5,6,7,8,9]原数组并未扭转//接下来用同样形式测试spliceconsole.log(y.splice(2,5));//2,3,4,5,6console.log(y);//[0,1,7,8,9]显示原数组中的数值被剔除掉了 

slicesplice尽管都是对于数组对象进行截取,然而二者还是存在显著区别,函数参数上slicesplice第一个参数都是截取开始地位,slice第二个参数是截取的完结地位(不蕴含),而splice第二个参数(示意这个从开始地位截取的长度),slice不会对原数组产生变动,而splice会间接剔除原数组中的截取数据!

10.如何在JS中动静增加/删除对象的属性?

咱们能够应用object.property_name = value向对象增加属性,delete object.property_name 用于删除属性。

例如:

let user = new Object();// adding a propertyuser.name='Anil';user.age  =25;console.log(user);delete user.age;console.log(user); 

11.解释一下什么是 promise ?

promise是js中的一个对象,用于生成可能在未来产生后果的值。 值能够是已解析的值,也能够是阐明为什么未解析该值的起因。

promise 能够有三种状态:

  • pending:初始状态,既不是胜利也不是失败
  • fulfilled:意味着操作齐全胜利
  • rejected:意味着操作失败

一个期待状态的promise对象可能胜利后返回一个值,也能失败后带回一个谬误
当这两种状况产生的时候,处理函数会排队执行通过then办法会被调用。

12. 数组去反复的办法有哪些

1.应用 set

function uniquearray(array) {  let unique_array= Array.from(set(array))  return unique_array;} 

2.应用 filter

function unque_array (arr) {  let unique_array = arr.filter(function(elem, index, self) {    return index == self.indexOf(elem);  })  return unique_array;} console.log(unique_array(array_with_duplicates)); 

3.应用 for 循环

Array dups_names = ['Ron', 'Pal', 'Fred', 'Rongo', 'Ron'];function dups_array(dups_names) { let unique = {}; names.forEach(function(i) {    If (!unique[i]) {      unique[i] = true;    }  });return Object.keys(unique);}   // Ron, Pal, Fred, RongoDups_array(names); 

13. undefined,null 和 undeclared 有什么区别?

1.null示意"没有对象",即该处不应该有值,转为数值时为0。典型用法是:

(1) 作为函数的参数,示意该函数的参数不是对象。

(2) 作为对象原型链的起点。

2.undefined示意"短少值",就是此处应该有一个值,然而还没有定义,转为数值时为NaN。典型用法是:

(1)变量被申明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

3.undeclared:js语法错误,没有申明间接应用,js无奈找到对应的上下文。

14.列出JS根本和非根本数据类型之间的一些区别?

1.目前JS中有6种根本数据类型: UndefinedNullBooleanNumberSymbolString。还有1种简单的数据类型————ObjectObject实质上是由一组无序的名值对组成的。ObjectArrayFunction则属于援用类型。

2.根本数据类型是不可变的,而非根本数据类型是可变的。

3.根本数据类型是不可变的,因为它们一旦创立就无奈更改,但非根本数据类型刚可更改,意味着一旦创立了对象,就能够更改它。

4.将根本数据类型与其值进行比拟,这意味着如果两个值具备雷同的数据类型并具备雷同的值,那么它们是严格相等的。

5.非根本数据类型不与值进行比拟。例如,如果两个对象具备雷同的属性和值,则它们严格不相等。

15. BOM 和 DOM 的关系

BOM全称Browser Object Model,即浏览器对象模型,次要解决浏览器窗口和框架。

DOM全称Document Object Model,即文档对象模型,是 HTML 和XML 的利用程序接口(API),遵循W3C 的规范,所有浏览器公共恪守的规范。

JS是通过拜访BOM(Browser Object Model)对象来拜访、管制、批改客户端(浏览器),因为BOMwindow蕴含了documentwindow对象的属性和办法是间接能够应用而且被感知的,因而能够间接应用window对象的document属性,通过document属性就能够拜访、检索、批改XHTML文档内容与构造。因为document对象又是DOM的根节点。

能够说,BOM蕴含了DOM(对象),浏览器提供进去给予拜访的是BOM对象,从BOM对象再拜访到DOM对象,从而js能够操作浏览器以及浏览器读取到的文档。

16. JS中的深拷贝与浅拷贝的区别?

  • 深拷贝递归地复制新对象中的所有值或属性,而拷贝只复制援用。
  • 在深拷贝中,新对象中的更改不会影响原始对象,而在浅拷贝中,新对象中的更改,原始对象中也会跟着改。
  • 在深拷贝中,原始对象不与新对象共享雷同的属性,而在浅拷贝中,它们具备雷同的属性。

17. 如何将 JS 日期转换为ISO规范

toISOString() 办法用于将js日期转换为ISO规范。 它应用ISO规范将js Date对象转换为字符串。如:

var date = new Date();var n = date.toISOString();console.log(n);// YYYY-MM-DDTHH:mm:ss.sssZ 

18. 解释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元素解决。

19. 如何在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); 

20.如何在JS中克隆对象

Object.assign() 办法用于在JS中克隆对象。如:

var x = {myProp: "value"};var y = Object.assign({}, x);