apply与call简单用法以及判断数组的坑
1 typeof 和 instanceof
var array = [];
平时如果判断一个对象是否为数组,可能你会用 typeof array,但是输出为“object”。
typeof 一般只能返回如下几个结果:
number,boolean,string,function,object,undefined。
对于 Array,Null 等特殊对象使用 typeof 一律返回 object。
所以你因该 :
array instanceof Array 输出为 true;
当然 :
array instanceof Object 输出也为 true;
因为 Array本身就是对象的子集。
这也是为什么转化类数组为数组的方法为:
Array.prototype.slice.call(arguments,0);
当然:
[].slice.call(arguments,0);也是可以的。
2 call 和 apply
上面既提到call的用法,那么我就顺便说一下call和apply的用法。
apply:
Function.apply(obj,args)方法能接收两个参数,
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments, 指的是函数中的参数
实例:
function people(age,sex){
this.age=age;
this.sex=sex;
};
function adult(age,sex){
people.apply(this,arguments)
};
var jack = new adult(18,'man');console.log(jack.age+":"+jack.sex)
输出为 18:man;
其实看到这段代码就知道apply怎么用了吧。
其实apply 说到底就是为了使的一个对象可以使用不属于自己的方法,例如:jack.people(),这样肯定不行的!
网上看到的关于apply一些延伸的方法:
求最大值:var array = [1,2,3];Math.max.apply(null,array); // 3
求最小值:var array = [1,2,3];Math.min.apply(null,array); // 1
合并数组:var array1 = [1,2,3],array2 = [4,5,6];Array.prototype.push.apply(array1,array2);
其实就是利用apply的特性将数组转化为参数列表[param1[,param2[,…[,paramN]]]],去处理这些问题。
前两个方法是因为不接受数组,所以这样处理。
第三个合并数组有很多其他方法,可以不这样用。
call:
Function.call(obj,[param1[,param2[,…[,paramN]]]])
其实这里的参数列表 [param1[,param2[,…[,paramN]]]]= arguments;只是call 必须将参数列出来;
如果运用上面的例子,输出的结果是一样一样的!
如果还有其他延伸的有意思的方法给以发评论告诉我!
apply与call简单用法以及判断数组的坑的更多相关文章
- typeof 和 instanceof apply与call简单用法以及判断数组的坑
1 typeof 和 instanceof var array = [];平时如果判断一个对象是否为数组,可能你会用 typeof array,但是输出为“object”. typeof 一般只能返回 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- Jquery判断数组中是否包含某个元素$.inArray()的用法
判断数组里面是否包含某个元素可以使用 $.inArray("元素(字符串)",数组名称) 进行判断 ,当存在该元素(字符串)时,返回该元素在数组的下标,不存在时返回 -1 示例代码 ...
- call(),apply(),bind() 区别和用法
call call 方法第一个参数是要绑定给this的值,后面传入的是一个参数列表.当第一个参数为null.undefined的时候,默认指向window. var arr = [1, 2, 3, 8 ...
- Apply 与 Call 的用法(简化版)
Javascript中Apply 与 Call 的用法,这里只作简单的入门说明 function human( name, age ){ this.name = name; this.age = ag ...
- 161101、在Java中如何高效判断数组中是否包含某个元素
如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...
- JS的简单用法
JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...
- 在Java中如何高效的判断数组中是否包含某个元素
原文出处: hollischuang(@Hollis_Chuang) 如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Ove ...
- call、apply、bind的用法
数组追加 //用apply拼接 var arr1=[12,'name:foo',2048]; var arr2=['Joe','Hello']; Array.prototype.push.apply( ...
随机推荐
- iOS开发总结——协议代理的认识
1.前言 自今年5月底正式转iOS之后,天天get新技能,很多技能在脑子里回旋不吐不快,所以,写点东西整理一下.先从协议代理开始. 2.协议方法的声明 @protocol EventMenuBarDe ...
- Java爬虫——Gecco简单入门程序(根据下一页一直爬数据)
为了完成作业,所以学习了一下爬虫Gecco,这个爬虫集合了以往所有的爬虫的特点,但是官方教程中关于Gecco的教程介绍的过于简单,本篇博客是根据原博客的地址修改的,原博客中只有程序的截图,而没有给出一 ...
- 【GDKOI2017】 两个胖子萌萌哒 小学奥数题
题目大意:给你一个$n\times m$的网格,你要在这个网格上画三角形. 三角形的顶点只能在网格的整点上,且至少有一条边平行于$x$或$y$轴,且三角形面积为整数.问你能画多少个不同的三角形. 两个 ...
- POJ 1111
#include<iostream> #define MAXN 30 using namespace std; char _m[MAXN][MAXN]; bool mark[MAXN][M ...
- 去掉iphone上拨号弹出框
1.常规的方法可以直接去除默认事件event.preventDefault() 2.使用vue的话可以: <div @click.stop.prevent=</div> //或者 & ...
- 数据输入——生成你需要的echart图(世界地图,气泡图)
上一篇文章介绍了:堆积柱状图.扇形图.嵌套环形图,现在来介绍一下:世界地图和气泡图 1.世界地图 http://echarts.baidu.com/examples/editor.html?c=map ...
- javascript对象属性的命名规则
JS标识符的命名规则,即变量的命名规则: 标识符只能由字母.数字.下划线和‘$’组成 数字不可以作为标识符的首字符 对象属性的命名规则 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括只 ...
- wp-postviews使用方法
1.安装 2.头部引用<?php wp_head(); ?> 3.文章调用:<?php if(function_exists('the_views')) { the_views(); ...
- 利用反射,批量启动WCF服务
对于WCF的宿主启动来说,有好多方法,单独启动也很简单,可以根据业务需要来自由选择(单独启动方法这里就不做解释) 对于业务服务比较多的时候,往往需要多个服务来承载系统,但是如果将服务启动单独写代码启动 ...
- Shell脚本编写4-----Shell 流程控制
没啥好说的,直接从demo里看吧!(1) if 语句shell脚本的if语句格式如下: 判断输入两个参数的大小,执行结果如下 (2)for 循环for循环语法格式如下: 执行结果如下 (3)while ...