Javascript中一些不经意的点

in #cn7 years ago (edited)

image source

刚刚看了MDN上的一篇文章重新介绍 JavaScript(JS 教程),重温了一下JS的同时,也发现了一些平时没注意的点:

  • 字符串以数字 0 开头,parseInt()函数会把这样的字符串视作八进制数字;同理,0x开头的字符串则视为十六进制数字。
    parseInt("010");  //  8
    parseInt("0x10"); // 16
    
  • 把一个二进制数字字符串转换成整数值,只要把第二个参数设置为 2 就可以。
    parseInt("11", 2); // 3
    
  • parseFloat()只应用于解析十进制数字。
  • 单元运算符 + 也可以把数字字符串转换成数值。
    + "010";  // 10
    + "0x10"; // 16
    

    与 parseInt() 和 parseFloat() 不同,只要字符串中含有无法被解析成数字的字符,该字符串都将被转换成 NaN。

    + '10.2abc';   //NaN
    parseInt('10.2abc');   //10
    parseFloat('10.2abc');   //10.2   
    
  • 如果向 Array.prototype 添加了新的属性,使用 for...in 循环这些属性也同样会被遍历。所以不推荐这种方法,可以通过遍历一个数组或使用 forEach。
  • arguments对象是所有(非箭头)函数中都可用的局部变量。arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。但是它可以被转换为一个真正的Array。
    var args = Array.prototype.slice.call(arguments);
    var args = [].slice.call(arguments);
    // 对参数使用slice会阻止某些JavaScript引擎中的优化(比如V8)。如果你关心性能,尝试通过遍历arguments对象来构造一个新的数组。
    var args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));
    
    // ES2015
    const args = Array.from(arguments);
    
  • Function.length 是函数对象的一个属性值,指该函数有多少个必须要传入的参数,即形参的个数。形参的数量不包括剩余参数个数,仅包括第一个具有默认值之前的参数个数。与之对比的是, arguments.length 是函数被调用时实际传参的个数。
    function Test(a,b,c,d){
    console.log(arguments.length);
    };
    Test(3);    // 1
    Test.length;    // 4
    
Sort:  

@syt, May the force be with you...愿steemit原力和与你同在!