首页 > 编程语言 > 详细

容易遗忘的Javascript点

时间:2020-03-03 01:51:40      阅读:69      评论:0      收藏:0      [点我收藏+]

 

1.关于 JavaScript中的 Array.prototype.slice.call( )

function test(){
  var _args=Array.prototype.slice.call(arguments);
 console.log(args);
}

test(1,3);   //[1,3]  

此函数可以将 类数组(此处为arguments)转换为真正的数组, 这个方法可以类数组转换成真正数组

。 前提是此对象有length属性。(IE下 Dom节点集合不可转)

 

1) 先来说一个有趣的分享。

var a_arr=[1,2,3];

a_arr.get=function(){return 0};

由于 a_arr是一个附带get方法的一个数组。大家不用觉得奇怪,数组是对象,这么加个get方法没有毛病。Array.prototype.slice.call(a_arr)     //    ==>> [1,2,3]  输出变成这样。

说明slice过程会仅仅保留数组部分,不会保留其他杂项。 于是上述灰色代码部分的例子就可以理解了。

 

2)  关于call的理解。-----------------------------  停止线 -----------------------

var data=[{name:"liuhf",age:19},{name:"wangwu",age:21}]

function print_name(){
  console.log(this.name)
}

print_name.call(data[0])   // liuhf

for(var i=0;i<data.length;i++){
  
  (function(i){
       console.log(i)
       this.eat=function(){console.log("I can eat, my index is"+i)}
		this.eat();
  }).call(data[i],i)   //把遍历对象绑定到eat方法,call的第二个参数是把参数带到被调函数
  
}

  

 

 

 2. 关于对象转化数组,类数组转化为数组的一些操作总结。

let array_like_obj = {
 ‘0‘: ‘a‘,
 ‘1‘: ‘b‘,
 ‘2‘: ‘c‘,
 length: 3
};

real_arr=Array.from(arrayLike)   //  ==>> ["a", "b", "c"]

/*---------------------------------------------------------------*/

let array_like_arr = [1,2,3] ;

array_like_arr.get=function(){ return 0 }  

Array.from(array_like_arr)  // [1,2,3]

// 或者
Array.prototype.slice.call(array_like_arr) // [1,2,3]

 

2.拓展预算符 ...   (如果是数组,就相当于去 [ ] 括号,如果是字符串,那么就变成数组 ,每项 )

var a =[{d:1}]//去掉外套就是 {d:1}
var b = {...a,e:2}

var a=[1,2]
var b =[...a]
//b (2) [1, 2]

var a=[1,2]
var b = [8,...a,9]
//b (4) [8, 1, 2, 9]

var s = ‘nice‘
var a = [...s]
//a (4) ["n", "i", "c", "e"]

function a ([m,...n]){console.log(m,n)}
a([1])
//打印出 1  [ ]

扩展运算符内部调用的是数据结构的 Iterator 接口,因此只要具有 Iterator 接口的对象,都可以使用扩展运算符,比如 Map 结构。

 

 

 


 

 

容易遗忘的Javascript点

原文:https://www.cnblogs.com/liuliu-hai/p/12399050.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!