Javascript中一些不经意的点
刚刚看了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
@syt, May the force be with you...愿steemit原力和与你同在!