来源:javapoint
译者:前端小智
为了保证的可读性,本文采用意译而非直译。javascript
阿里云最近在作活动,低至2折,有兴趣能够看看:
https://promotion.aliyun.com/...
为了保证的可读性,本文采用意译而非直译。php
let
和const
有什么用?在现代js中,let
&const
是建立变量的不一样方式。 在早期的js中,我们使用var
关键字来建立变量。 let
&const
关键字是在ES6版本中引入的,其目的是在js中建立两种不一样类型的变量,一种是不可变的,另外一种是可变的。html
const:它用于建立一个不可变变量。不可变变量是指其值在程序的整个生命周期中永不改变的变量。前端
let: let
用于建立一个可变变量,可变变量是像var
这样的普通变量,能够任意次数地更改。java
JS有三类的错误:node
加载时错误:加载web页面时出现的错误(如语法错误)称为加载时错误,它会动态生成错误。git
运行时错误:因为滥用HTML语言中的命令而致使的错误。es6
逻辑错误:这些错误是因为对具备不一样操做的函数执行了错误的逻辑而致使的github
在 JS 中使用document.getElementsByClassName()
方法来获取具备类名的元素。web
通常状况下,变量取值到建立这个变量的函数的做用域中取值。可是若是在当前做用域中没有查到值,就会向上级做用域去查,直到查到全局做用域,这么一个查找过程造成的链条就叫作做用域链。
JS中的做用域链主要用于解析变量的值。 若是没有这个,在不一样的做用域内定义了许多变量,JS很难为变量选择某个值。
MUL
函数MUL
表示数的简单乘法。在这种技术中,将一个值做为参数传递给一个函数,而该函数将返回另外一个函数,将第二个值传递给该函数,而后重复继续。例如:x*y*z
能够表示为
function mul (x) { return function (y) { return function (z) { return x * y * z; } } }
使用内置函数:内置函数reverse()
直接反转字符串。
str="jQuery"; str = str.split("") str = str.reverse() str = str.join("") alert(str);
首先将字符串拆分为数组,而后反转数组,最近将字符链接起来造成字符串。
使用循环:首先,计算字符串中的字符数,而后对原始字符串应用递减循环,该循环从最后一个字符开始,打印每一个字符,直到count变为零。
window.location.href =“https://www.onlineinterviewquestions.com/”
window.location.replace(" https://www.onlineinterviewquestions.com/;");
设计模式是软件设计中常见问题的通用可重用解决方案,如下是一些设计模式是:
建立模式:该模式抽象了对象实例化过程。
结构型模式:这些模式处理不一样的类和对象以提供新功能。
行为模式:也称发布-订阅模式,定义了一个被观察者和多个观察者的、一对多的对象关系。
并行设计模式:这些模式处理多线程编程范例。
架构设计模式:这些模式用于处理架构设计。
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,6 console.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,4 console.log(x);[0,1,2,3,4,5,6,7,8,9]原数组并未改变 //接下来用一样方式测试splice console.log(y.splice(2,5));//2,3,4,5,6 console.log(y);//[0,1,7,8,9]显示原数组中的数值被剔除掉了
slice
和splice
虽然都是对于数组对象进行截取,可是两者仍是存在明显区别,函数参数上slice
和splice
第一个参数都是截取开始位置,slice
第二个参数是截取的结束位置(不包含),而splice
第二个参数(表示这个从开始位置截取的长度),slice
不会对原数组产生变化,而splice
会直接剔除原数组中的截取数据!
我们可使用object.property_name = value
向对象添加属性,delete object.property_name
用于删除属性。
例如:
let user = new Object(); // adding a property user.name='Anil'; user.age =25; console.log(user); delete user.age; console.log(user);
promise
是js中的一个对象,用于生成可能在未来产生结果的值。 值能够是已解析的值,也能够是说明为何未解析该值的缘由。
promise 能够有三种状态:
一个等待状态的promise对象可以成功后返回一个值,也能失败后带回一个错误
当这两种状况发生的时候,处理函数会排队执行经过then方法会被调用
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, Rongo Dups_array(names);
1.null表示"没有对象",即该处不该该有值,转为数值时为0。典型用法是:
(1) 做为函数的参数,表示该函数的参数不是对象。
(2) 做为对象原型链的终点。
2.undefined表示"缺乏值",就是此处应该有一个值,可是尚未定义,转为数值时为NaN。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
3.undeclared:js语法错误,没有申明直接使用,js没法找到对应的上下文。
1.目前JS中有6
种基本数据类型: Undefined
、Null
、Boolean
、Number
、Symbol
和 String
。还有1种复杂的数据类型————Object
,Object
本质上是由一组无序的名值对组成的。Object
、Array
和Function
则属于引用类型。
2.基本数据类型是不可变的,而非基本数据类型是可变的。
3.基本数据类型是不可变的,由于它们一旦建立就没法更改,但非基本数据类型刚可更改,意味着一旦建立了对象,就能够更改它。
4.将基本数据类型与其值进行比较,这意味着若是两个值具备相同的数据类型并具备相同的值,那么它们是严格相等的。
5.非基本数据类型不与值进行比较。例如,若是两个对象具备相同的属性和值,则它们严格不相等。
只需给现有函数赋值,就能够很容易地在现有函数中添加新属性。例如,现有一个对象person
,经过下面的代码来为 person
添加新的属性:
person.country= “India”;
在JS中,我们使用函数 setInterval()
在每x
秒内调用函数。如:
setInterval(function (){ alert("Hello"); }, 3000);
展开运算符在须要多个参数/变量/元素的位置展开表达式,它用三个点(...
)。如:
var mid = [3, 4]; var newarray = [1, 2, ...mid, 5, 6]; console.log(newarray); // [1, 2, 3, 4, 5, 6]
宿主对象:这些是运行环境提供的对象。这意味着它们在不一样的环境下是不一样的。例如,浏览器包含像windows
这样的对象,可是Node.js环境提供像Node List
这样的对象。
原生对象:这些是JS中的内置对象。它们也被称为全局对象,由于若是使用JS,内置对象不受是运行环境影响。
高阶函数是JS函数式编程的最佳特性。它是以函数为参数并返回函数做为结果的函数。一些内置的高阶函数是map
、filter
、reduce
等等。
一、对于string
,number
等基础类型,==
和===
有区别
1)不一样类型间比较,==
之比较“转化成同一类型后的值”看“值”是否相等,===
若是类型不一样,其结果就是不等。
2)同类型比较,直接进行“值”比较,二者结果同样。
二、对于Array
,Object
等高级类型,==
和===
没有区别
进行“指针地址”比较。
三、基础类型与高级类型,==
和===
有区别
1)对于==
,将高级转化为基础类型,进行“值”比较。
2)由于类型不一样,===
结果为false
。
匿名函数:就是没有函数名的函数,如:
(function(x, y){ alert(x + y); })(2, 3);
这里建立了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。
JS彻底运行在客户端上。301
是服务器做为响应发送的响应代码。所以,在JS中不可能执行301
重定向。
事件捕获和冒泡: 在HTML DOM API中,有两种事件传播方法,它们决定了接收事件的顺序。两种方法是事件冒泡和事件捕获。第一个方法事件冒泡将事件指向其预期的目标,第二个方法称为事件捕获,其中事件向下到达元素。
事件捕获
捕获过程不多被使用,可是当它被使用时,它被证实是很是有用的。这个过程也称为滴流模式
。在这个过程当中,事件首先由最外层的元素捕获,而后传播到最内部的元素。例如:
<div> <ul> <li></li> </ul> </div>
从上面的示例中,假设单击事件发生在li
元素中,在这种状况下,捕获事件将首先处理div
,而后处理ul
,最后命中目标元素li
。
事件冒泡
冒泡的工做原理与冒泡相似,事件由最内部的元素处理,而后传播到外部元素。
<div> <ul> <li></li> </ul> </div>
从上面的例子中,假设click
事件确实发生在冒泡模型中的li
元素中,该事件将首先由li
处理,而后由ul
处理,最后由div
元素处理。
import * as objectname from ‘./file.js’
用于将全部导出的成员导入为对象。 可使用对象的点(.
)运算符来访问导出的变量或方法,如:
objectname.member1; objectname.member2; objectname.memberfunc();
箭头函数是在es6
或更高版本中编写函数表达式的简明方法。箭头函数不能用做构造函数,也不支持this
,arguments
,super
或new.target
关键字,它最适合非方法函数。 一般,箭头函数看起来像 const function_name =()=> {}
。
const greet=()=>{console.log('hello');} greet();
JS容许将声明移动到顶部的默认行为称为提高。JS中建立函数的两种方法是函数声明和函数表达式。
函数声明
具备特定参数的函数称为函数声明,在JS中建立变量称为声明。如:
hoisted(); // logs "foo" function hoisted() { console.log('foo'); }
函数表达式
当使用表达式建立函数时,称为函数表达式。如:
notHoisted(); // TypeError: notHoisted is not a function var notHoisted = function() { console.log('bar'); };
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}
)。
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};
下面是一些最流行的JS单元测试框架:
在JS中有三种类型的弹出框可用,分别是:
toISOString() 方法用于将js日期转换为ISO标准。 它使用ISO标准将js Date对象转换为字符串。如:
var date = new Date(); var n = date.toISOString(); console.log(n); // YYYY-MM-DDTHH:mm:ss.sssZ
Object.assign()
方法用于在JS中克隆对象。如:
var x = {myProp: "value"}; var y = Object.assign({}, x);
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);
BOM全称Browser Object Model
,即浏览器对象模型,主要处理浏览器窗口和框架。
DOM
全称Document Object Model
,即文档对象模型,是 HTML 和XML 的应用程序接口(API),遵循W3C 的标准,全部浏览器公共遵照的标准。
JS是经过访问BOM(Browser Object Model)对象来访问、控制、修改客户端(浏览器),因为BOM的window
包含了document
,window
对象的属性和方法是直接可使用并且被感知的,所以能够直接使用window
对象的document
属性,经过document属性就能够访问、检索、修改XHTML文档内容与结构。由于document
对象又是DOM
的根节点。
能够说,BOM
包含了DOM
(对象),浏览器提供出来给予访问的是BOM
对象,从BOM
对象再访问到DOM
对象,从而js能够操做浏览器以及浏览器读取到的文档。
substr()
和substring()
函数有什么区别substr()
函数的形式为substr(startIndex,length)
。 它从startIndex
返回子字符串并返回'length
'个字符数。
var s = "hello"; ( s.substr(1,4) == "ello" ) // true
substring()
函数的形式为substring(startIndex,endIndex)
。 它返回从startIndex
到endIndex - 1
的子字符串。
var s = "hello"; ( s.substring(1,4) == "ell" ) // true
“use strict”
是Es5中引入的js指令。 使用“use strict”
指令的目的是强制执行严格模式下的代码。 在严格模式下,我们不能在不声明变量的状况下使用变量。 早期版本的js忽略了“use strict”
。
在JS中,有一些很酷的东西。其中之一是委托模型。当捕获和冒泡时,容许函数在一个特定的时间实现一个处理程序到多个元素,这称为事件委托。事件委托容许将事件侦听器添加到父节点而不是指定的节点。这个特定的侦听器分析冒泡事件,以找到子元素上的匹配项。
原文:https://www.javatpoint.com/ja...
代码部署后可能存在的BUG无法实时知道,过后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给你们推荐一个好用的BUG监控工具 Fundebug。
干货系列文章汇总以下,以为不错点个Star,欢迎 加群 互相学习。
https://github.com/qq44924588...
我是小智,公众号「大迁世界」做者,对前端技术保持学习爱好者。我会常常分享本身所学所看的干货,在进阶的路上,共勉!
关注公众号,后台回复福利,便可看到福利,你懂的。
每次整理文章,通常都到2点才睡觉,一周4次左右,挺苦的,还望支持,给点鼓励