1.Array.prototype.slice
数组的slice()方法通常用来从一个数组中抽取片断。但很多开发者不了解的是,这个方法还可以用来将“类数组”元素(比如 arguments、参数列表、节点列表和属性列表)转换成真正的数组:(译注:DOM 元素的属性列表通过 attributes属性获取), Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组.
1 2 3 4 5 6 7
| var a={length:2,0:'first',1:'second'}; Array.prototype.slice.call(a);
var a={length:2}; Array.prototype.slice.call(a);
var argsArr = Array.prototype.slice.call(arguments);
|
2.使用push来合并数组
我们知道当我们想要合并两个数组时一般使用Array的concat()方法来试试,concat方法能够将两个及两个以上的数组合并成一个数组,同时我们也可以使用Array prototype 的push方法来实现两个数组的合并.
1 2 3 4 5 6 7
| var a = ['hank', 'mark']
var b = ['hulk']
Array.prototype.push.apply(a, b)
console.log(a)
|
3.Js数据去掉小数点后边的0
在一起,我一般是使用正则表达式来替换,先判断小数点后面有无0和0的位置,然后在使用正则来替换这些0。今天突然发现一个很神奇的方法: parseFloat()
1 2
| var a = 1.0; a = parseFloat(a)
|
是不是特别简单?
4.JS浮点数运算精度
在Javascript中两个浮点数进行运算是得到的结果可能不是我们想要的结果,比如:
1 2 3 4 5
| var a, b; a = 0.2; b = 0.1;
c = a + b
|
主要是因为计算机是二进制浮点运算,而我们输入的是十进制浮点数,十进制数转化为二进制运算过后再转化回来,在转化过程中可能会有损失.
解决办法,先装换成整数,运算过后,再装换回来:
1 2 3 4 5 6 7 8 9 10 11 12
| const T_NUMBER = 'number';
customSubtract = function(minuend, subtrahend) { var maxDecimalDigits, minuendDecimalDigits, minuendStr, result, subtrahendDecimalDigits, subtrahendStr; minuendStr = typeof minuend === T_NUMBER ? minuend + '' : minuend; subtrahendStr = typeof subtrahend === T_NUMBER ? subtrahend + '' : subtrahend; minuendDecimalDigits = minuendStr.indexOf('.') === -1 ? 0 : minuendStr.length - minuendStr.indexOf('.') - 1; subtrahendDecimalDigits = subtrahendStr.indexOf('.') === -1 ? 0 : subtrahendStr.length - subtrahendStr.indexOf('.') - 1; maxDecimalDigits = Math.pow(10, Math.max(minuendDecimalDigits, subtrahendDecimalDigits)); result = (minuend * maxDecimalDigits - subtrahend * maxDecimalDigits) / maxDecimalDigits; return result; };
|
5. Is object empty?
Check an object is empty or not?
Jquery has a function to check the object: ** jQuery.isEmptyObject **
1 2 3
| if ($.isEmptyObject(obj)) { // do something }
|
It’s easy and cross-browser function.
1 2 3 4 5 6 7
| var isEmptyObject = function(obj) { for(var key in obj){ return false; }
return true; }
|