js中的一些基础语法整理

JavaScript015

js中的一些基础语法整理,第1张

普通函数谁调用,函数中this就指向谁,teacher调用getName,getName中的this指向teacher

箭头函数⾥的this是定义的时候决定的,定义的时候 getName的this指向的是window,window 没有name ,所以输出undefine

因此箭头函数不能用作构造函数,构造函数需要改变this的指向到新实例例出来的对象,this指向是定义的时候决定的

针对可迭代对象的Iterator接⼝口,通过遍历器器按顺序获取对应的值进⾏行行赋值.

Iterator是⼀一种接⼝口,为各种不不⼀一样的数据解构提供统⼀一的访问机制。任何数据解构只要有 Iterator接⼝口,就能通过遍历操作,依次按顺序处理理数据结构内所有成员。ES6中的for of的语 法相当于遍历器器,会在遍历数据结构时,⾃自动寻找Iterator接⼝口。

可迭代对象是Iterator接⼝口的实现。这是ECMAScript 2015的补充,它不不是内置或语法,⽽而仅 仅是协议。任何遵循该协议点对象都能成为可迭代对象。可迭代对象得有两个协议:可迭代协 议和迭代器器协议。

可迭代协议:对象必须实现iterator⽅方法。即对象或其原型链上必须有⼀一个名叫 Symbol.iterator的属性。该属性的值为⽆无参函数,函数返回迭代器器协

通过以上可知,自定义数据结构,只要拥有Iterator接口,并将其部署到⾃己的

Symbol.iterator属性上,就可以成为可迭代对象,能被for of循环遍历.

1.for in 与 for of

遍历数组时,key为数组下标字符串串遍历对象,key为对象字段名。

缺点:

for in 不不仅会遍历当前对象,还包括原型链上的可枚举属性

for in 不不适合遍历数组,主要应⽤用为对象

for of 仅遍历当前对象

for in 遍历的是数组索引

for of 遍历的是数组中内容

for of 可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments对象,NodeList对 象)上创建⼀一个迭代循环,调⽤用⾃自定义迭代钩⼦子,并为每个不不同属性的值执⾏行行语句句。

Object.getOwnPropertyNames

该⽅方法返回一个数组,该数组对元素是 obj⾃自身拥有的枚举或不不可枚举属性名称字符串串。

Object.create()方法创建一个新的对象,并以方法的第一个参数作为新对象的proto属性的值 (根据已有的对象作为原型,创建新的对象。) Object.create()方法还有第二个可选参数,是一个对象,对象的每个属性都会作为新对象的自身属性,对象的属性值以descriptor(Object.getOwnPropertyDescriptor(obj, ‘key’))的形式 出现,且enumerable默认为false

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>五种常用的语法</title>

</head>

<body>

</body>

</html>

小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,不难理解 (function(){})()可以将没有名字的函数执行了

关于匿名函数写法,很发散

最常见的用法: 

(function() { 

alert('water') 

})() 

当然也可以带参数: 

(function(o) { 

alert(o) 

})('water') 

匿名函数的链式调用: 

(function(o) { 

alert(o) 

return arguments.callee 

})('water')('down') 

~(function(){ 

alert('water') 

})()

 

void function(){ 

alert('water') 

}()//据说效率最高

 

+function(){ 

alert('water') 

}() 

 

-function(){ 

alert('water') 

}() 

 

~function(){ 

alert('water') 

}() 

 

!function(){ 

alert('water') 

}() 

(function(){ 

alert('water') 

}())//有点强制执行的味道

其实有些人考虑到写法的效率问题,如果可以,给我一个数据,自我感觉这些写法是有效率问题,但是应该是微乎其微而已(或许不对),我会随便选一个用