如果给数组操作符的是一个非整形数值,那么将作为一个代表数组的对象的属性(property)创建,而非作为数组的元素
例如:a[2.2] = "2"
那么得到的结果将是arr.hasOwnProperty(2.2)为true
如果给数组分配length属性,写一个小于数组元素数量的值会缩短数组,写0会彻底清空数组
在数组定义时省略的元素不会在forEach遍历时被列出,但是手动赋值为undefined的元素是会被列出的:
var value = new Map() map的建可以是任意数据类型,而Object的键全部是string
value.set() value.get() value.delete() value.size value.has()
vat value1 = new Set()
value1.add() value1.has() value1.delete() value1.size
对于set集合 可以使用Array.from或展开操作符来完成集合到数组的转换,同样,Set的构造器接受数组作为参数,可以完成从Array到Set的转换
var set = new Set()
set.add("1")
set.add("2")
var arr = [...map] //通过扩展运算符 完成集合到数组
var arr =Array.from(map) //通过Array.from 完成集合到数组
mySet2 = new Set([1,2,3,4]) //完成数组到集合
对象的创建: Object.create() 该方法可以允许指定其原型对象
生成器可以调用throw()方法抛出错误
function *fibonacci(){
var fn1 =0
var fn2 = 1
while(true){
var current = fn1
fn1 = fn2
fn2 = current + fn1
var reset = yield current
if(reset){
fn1 =0
fn2 =1
}
}
}
var sequence = fibonacci()
console.log(sequence.next().value)
console.log(sequence.next().value)
console.log(sequence.next().value)
console.log(sequence.throw("nvu9ewve")) //Exception: nvu9ewve
代理:Proxy
let handler={
get:function(target,name){
if(name in target){
return target[name]
} else{
return 42
}
}
}
var hand = new Proxy({},handler) //代理
hand.a =1
console.log(hand.a) //1
console.log(hand.b) //42
撤销代理:
用var hand = Proxy.revocable({},handler)来创建一个可销毁的Proxy
例如:a[2.2] = "2"
那么得到的结果将是arr.hasOwnProperty(2.2)为true
如果给数组分配length属性,写一个小于数组元素数量的值会缩短数组,写0会彻底清空数组
在数组定义时省略的元素不会在forEach遍历时被列出,但是手动赋值为undefined的元素是会被列出的:
var value = new Map() map的建可以是任意数据类型,而Object的键全部是string
value.set() value.get() value.delete() value.size value.has()
vat value1 = new Set()
value1.add() value1.has() value1.delete() value1.size
对于set集合 可以使用Array.from或展开操作符来完成集合到数组的转换,同样,Set的构造器接受数组作为参数,可以完成从Array到Set的转换
var set = new Set()
set.add("1")
set.add("2")
var arr = [...map] //通过扩展运算符 完成集合到数组
var arr =Array.from(map) //通过Array.from 完成集合到数组
mySet2 = new Set([1,2,3,4]) //完成数组到集合
对象的创建: Object.create() 该方法可以允许指定其原型对象
生成器可以调用throw()方法抛出错误
function *fibonacci(){
var fn1 =0
var fn2 = 1
while(true){
var current = fn1
fn1 = fn2
fn2 = current + fn1
var reset = yield current
if(reset){
fn1 =0
fn2 =1
}
}
}
var sequence = fibonacci()
console.log(sequence.next().value)
console.log(sequence.next().value)
console.log(sequence.next().value)
console.log(sequence.throw("nvu9ewve")) //Exception: nvu9ewve
代理:Proxy
let handler={
get:function(target,name){
if(name in target){
return target[name]
} else{
return 42
}
}
}
var hand = new Proxy({},handler) //代理
hand.a =1
console.log(hand.a) //1
console.log(hand.b) //42
撤销代理:
用var hand = Proxy.revocable({},handler)来创建一个可销毁的Proxy
使用hand.revoke() 来销毁 销毁之后在代理对象上进行任何操作都会报错
类数组
索引(数字)为属性, 必须有length属性,最好加上Push
var obj = {
"0": '0',
"1", '1',
"length": 2, // 必须
"push", Array.prototype.push,
"splice": Arrat.prototype.splice,
}
像上面这个样子就是类数组
push原理:
Array.prototype.push = function (value) {
this[this.length] = value
this.length ++
}