JavaScript 引用类型(五)

写在前面的话:

       本专栏,主要是用做个人学习使用,主要参考书籍《JavaScript高级程序设计》,主要记录JavaScript学习和使用中的难点和坑点,和主要知识点,很多信息仅作参考使用;本人本专栏的每一篇文章会不断修改和补充和完善,如果您发现有问题和疑问希望大家积极指出,方便我完善文章,谢谢大家。


1.Array通过字面量定义时:var arr = [,,,,,]长度不确定性,ie中长度可能为5 其他浏览器可能为6

2.判断一个对象是不是数组使用 Array.isArray(val)   IE9+支持

3.Array转换方法:toLocaleString()、toString()和 valueOf()方法

4.Array增删方法:尾部push(),pop(),头部unshift(),shift()

5.Array重排方法:reverse(),sort(); sort()方法有漏洞sort()方法的缺陷与解决

6.Array操作方法:concat(),slice(),splice()方法

7.Array位置方法:indexOf(),lastIndexOf()

8.Array迭代方法:every(),filter(),forEach(),map(),some()

推荐javascript手册

方法的列举后续就不做列举,自行参考手册

9.函数名表示的时指针,function f(){} ,f不是表示调用函数,而是函数的指针,既然是指针的概念就没有重载一说,只能是函数体被覆盖。

重点:函数声明和函数体的定义在,解析器并不是一样的,解析器会读取函数声明,保证可调用,函数体必须等到解析器执行到函数体所在行才会解释和执行。这种情况叫函数声明提升 这样就会导致一种问题,声明函数时使用一个变量去接受

alert(sum(10,10));
var sum = function(num1, num2){
    return num1 + num2;
};
(function(){
    alert(a);//alert('2')函数体
    a();//2
    var a = function(){
        alert('1');
    };
    function a(){
        alert('2')
    }
    alert(a);//alert('1')函数体
})();

 

这样由于变量提升的作用,导致sum的值为undefined,所以不推荐这种写法,函数提升与变量提升有不同

10.作为值的函数,返回一个函数有两种情况,返回函数的调用,该函数会被立刻执行,如果返回函数体则需要调用才会执行

11.函数内部arguments和this,arguments.callee(),调用本函数。this的指向可以通过下面的代码进行深入理解

window.color = "red";
var o = { color: "blue" };
function sayColor(){
    alert(this.color);
}
sayColor(); //"red"
o.sayColor = sayColor;
o.sayColor(); //"blue" 

12.函数的属性length 和 prototype   length是函数的命名参数的个数,prototype属性不可用for-in进行枚举,该属性可以实现函数的继承

13.apply()和call()主要用做扩充函数的作用域,用法fun.apply(this, arguments),fun.call(this, num1, num2),this改变了函数体内this的指向,bind(o)也可以实现这个作用

window.color = "red";
var o = { color: "blue" };
function sayColor(){
    alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue 

14.经典代码:工厂方法与字面量方法创建区别:一个是实列一个是值,值调用方法时后台会临时创建一个实列

var s1 = "some text";
s1.color = "red";
alert(s1.color); //undefined 


var value = "25";
var number = Number(value); //转型函数
alert(typeof number); //"number"
var obj = new Number(value); //构造函数
alert(typeof obj); //"object" 

a='1'; 
typeof a //'string'
a=new string('1');
typeof a//'object'

15.所有object转化为boolean都是true

var falseObject = new Boolean(false);
var result = falseObject && true;
alert(result); //true
var falseValue = false;
result = falseValue && true;
alert(result); //false 

16.eval(),解析器;eval()中创建的任何变量或函数都不会被提升,因为在解析代码的时候,它们被包含在一个字 符串中;它们只在 eval()执行的时候创建。

17Math对象中max()与min()函数只能直接接受数组,不能通过变量传值,可以是用apply()扩展作用域。

var max = Math.max.apply(Math, values);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值