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 必须将参数列出来;
如果运用上面的例子,输出的结果是一样一样的!

如果还有其他延伸的有意思的方法给以发评论告诉我!

最新文章

  1. 异常处理_Maven多模块web项目整合ssm+dubbo
  2. LintCode-- Remove Linked List Elements
  3. 在JavaScript中实现yield,实用简洁实现方式。
  4. Spring里用@RequestParam接受Date类型的url参数
  5. php while循环 指定显示内容 例如不想显示前10条和后10条
  6. javascript 变量转义
  7. js中addEventListener第三个参数涉及到的事件捕获与冒泡
  8. WPF 完美截图 <序>
  9. 微信小程序教学第四章第三节(含视频):小程序中级实战教程:详情-功能完善
  10. hdu 5274 树链剖分
  11. J.U.C-三剑客[semaphore\CyclicBarrier\CountDownLatch]
  12. IntelliJ IDEA添加JUnit单元测试
  13. 结合JDK源码看设计模式——简单工厂、工厂方法、抽象工厂
  14. 李昊大佬的CV模板
  15. using python read/write HBase data
  16. MEF 插件式开发之 DotNetCore 中强大的 DI
  17. java的小程序在html中的运行测试
  18. Python学习笔记之函数式编程
  19. Devexpress VCL Build v2014 vol 14.2.1 beta发布
  20. Java synchronized关键字的理解

热门文章

  1. 【原创】SSRS (SQL Serve Reporting Service) 访问权限的问题
  2. Opserver 初探三《服务器数据监控》
  3. PL/SQL DEVELOPER数字超长显示了科学计数法
  4. grep常用用法
  5. Android PdfViewer
  6. VMware Workstation 11 中 Ubuntu 14.04 的 VMware Tools 问题 :没有显示共享文件夹
  7. mysql数据库修改字符编码问题
  8. tomcat启动(四)Catalina分析-server的init()方法
  9. tomcat启动(三)Catalina简要分析
  10. highcharts绘制股票k线