【JS】js高级特性备忘

JavaScript 中的真假值
类型 真假值
Null 总是为假(false)
Undefined 总是为假(false)
Boolean 保持真假值不变
Number +0,-0 或是 NaN 的时候为假,其它值为真
String 空字符串的时候为假,其它值为真

Object 总是为真(true)



Array 的方法

JavaScript 中的 Array 提供了很多方法。

push和pop在数组的末尾进行操作,使得数组可以作为一个栈来使用。
shift和unshift在数组的首部进行操作。
slice(start, end)用来取得原始数组的子数组。其中参数start和end都可以是负数。如果是负数的话,实际使用的值是参数的原始值加上数组的长度。如var array = [2, 3, 4, 5]; array.slice(-2, -1);等价于array.slice(2, 3)。
splice是最复杂的一个方法,它可以同时删除和添加元素。该方法的第一个参数表示要删除的元素的起始位置,第二个参数表示要删除的元素个数,其余的参数表示要添加的元素。如代码var array = [2, 3, 4, 5]; array.splice(1, 2, 6, 7, 8);执行之后,array中的元素为[2, 6, 7, 8, 5]。该方法的返回被删除的元素。
length

JavaScript 中数组的 length 属性与其他语言中有很大的不同。在 Java 或是 C/C++ 语言中,数组的 length 属性都是用来表示数组中的元素个数。而 JavaScript 中,length 属性的值只是 Array 对象中最大的整数类型的属性的值加上 1 。当通过 [] 操作符来给 Array 对象增加元素的时候,如果 [] 中表达式的值可以转换为正整数,并且其值大于或等于 Array 对象当前的 length 的值的话,length 的值被设置成该值加上 1 。 length 属性也可以显式的设置。如果要设置的值比原来的 length 值小的话,该 Array 对象中所有大于或等于新值的整数键值的属性都会被删除。如代码清单 1中所示。

 

var array = [];
 array[0] = "a";
 array[100] = "b";
 array.length;     // 值为 101
 array["3"] = "c";
 array.length = 4; // 值为 "b" 的第 101 个元素被删除




arguments

在 JavaScript 中,在一个 function 内部可以使用 arguments 对象。该对象中包含了 function 被调用时的实际参数的值。 arguments 对象虽然在功能上有些类似数组(Array),但是它不是数组。 arguments 对象与数组的类似体现在它有一个 length 属性,同时实际参数的值可以通过 [] 操作符来获取。但是 arguments 对象并没有数组可以使用的 push、pop、splice 等 function 。其原因是 arguments 对象的 prototype 指向的是 Object.prototype 而不是 Array.prototype 。

使用 arguments 模拟重载

Java 和 C++ 语言都支持方法重载(overloading),即允许出现名称相同但是形式参数不同的方法;而 JavaScript 并不支持这种方式的重载。因为 JavaScript 中的 function 对象也是以属性的形式出现的,在一个对象中增加与已有 function 同名的新 function 时,旧的 function 对象会被覆盖。不过可以通过使用 arguments 来模拟重载,其实现机制是通过判断 arguments 中实际参数的个数和类型来执行不同的逻辑。如代码清单 2中所示。


function sayHello() {
    switch (arguments.length) {
        case 0: return "Hello";
        case 1: return "Hello, " + arguments[0];
        case 2: return (arguments[1] == "cn" ? " 你好," : "Hello, ") + arguments[0];
   };
 }

 sayHello();              // 结果是 "Hello"
 sayHello("Alex");        // 结果是 "Hello, Alex"
 sayHello("Alex", "cn");  // 结果是 " 你好,Alex"


arguments.callee

callee 是 arguments 对象的一个属性,其值是当前正在执行的 function 对象。它的作用是使得匿名 function 可以被递归调用。下面以一段计算斐波那契序列(Fibonacci sequence)中第 N 个数的值的代码来演示 arguments.callee 的使用,见代码清单 3。


function fibonacci(num) {
    return (function(num) {
        if (typeof num !== "number") return -1;
        num =  parseInt(num);
        if (num < 1) return -1;
        if (num == 1 || num == 2) return 1;
        return arguments.callee(num - 1) + arguments.callee(num - 2);
    })(num);
 }

 fibonacci(100);


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值