title: Javascript语法糖
date: 2015-12-24 19:18:13
tags: [javascript]
1.Array.prototype.slice
数组的slice()方法通常用来从一个数组中抽取片断。但很多开发者不了解的是,这个方法还可以用来将“类数组”元素(比如 arguments、参数列表、节点列表和属性列表)转换成真正的数组:(译注:DOM 元素的属性列表通过 attributes属性获取),Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组.
var a={length:2};
Array.prototype.slice.call(a);// [undefined,undefined]
var argsArr = Array.prototype.slice.call(arguments);
2.使用push来合并数组
我们知道当我们想要合并两个数组时一般使用Array的concat()方法来试试,concat方法能够将两个及两个以上的数组合并成一个数组,同时我们也可以使用Array prototype 的push方法来实现两个数组的合并.
var b = ['hulk']
Array.prototype.push.apply(a,b)
console.log(a) // ['hank','mark','hulk']
3.Js数据去掉小数点后边的0
在一起,我一般是使用正则表达式来替换,先判断小数点后面有无0和0的位置,然后在使用正则来替换这些0。今天突然发现一个很神奇的方法: parseFloat()
是不是特别简单?
4.JS浮点数运算精度
在Javascript中两个浮点数进行运算是得到的结果可能不是我们想要的结果,比如:
c = a + b // 0.30000000000000004,不是我们想要的0.3
主要是因为计算机是二进制浮点运算,而我们输入的是十进制浮点数,十进制数转化为二进制运算过后再转化回来,在转化过程中可能会有损失.
解决办法,先装换成整数,运算过后,再装换回来:
5. Is object empty?
Check an object is empty or not?
Jquery has a function to check the object: jQuery.isEmptyObject
It's easy and cross-browser function.
return true; // empty
}
6. 驼峰式和连字符式的转换
1) 驼峰转连字符
2) 连字符转驼峰
7. 按制定个数分割字符串
count = count || 2;
splitRegStr = '.{' + count + '}';
splitReg = new RegExp(splitRegStr,'g');
array = string.match(splitReg) || [];
if (array.join('').length !== string.length) {
array.push(string.substring(array.join('').length));
}
return array
}
8. 获得Html元素的某个Style属性值
使用element.style[key]只能获取到定义在元素上的style属性,可以使用document.defaultView.getComputedStyle(window.getComputedStyle)
方法来获取css中的style属性值,但在IE浏览器中没有document.defaultView.getComputedStyle
方法,需要使用currentStyle
属性值来代替该方法.
if (elem.currentStyle && elem.currentStyle[styleKey]) {
return elem.currentStyle[styleKey];
}
if (document.defaultView && document.defaultView.getComputedStyle) {
styleKey = styleKey.replace(/([A-Z])/g,'-$1').toLowerCase();
return document.defaultView.getComputedStyle(elem,null).getPropertyValue(styleKey);
}
return null;
}
9. 常用的正则
下面列出了开发中常用的正则表达式
10. 判断对象是否为数组
11. 字符串前缀补0
function leadingZeroes(value,length) {
var str = value.toString();
var finalLen = arguments.length === 2 ? length : 0;
if (str.length > finalLen) {
return str;
}
var prefix = new Array(finalLen - str.length + 1).join('0');
return prefix + str;
}
12. ES6函数防抖(debounce)
return function () {
content = this;
args = arguments;
const debounceHandler = function (resolve) {
const later = () => {
const late = new Date().valueOf() - timestamp;
if (late < wait && late >= 0) {
timeout = setTimeout(later,wait - late);
} else {
timeout = null;
if (!immediate) {
resolve(func.apply(content,args));
content = args = null;
}
}
};
timestamp = new Date().valueOf();
const isCallNow = immediate && !timeout;
if (!timeout) {
timeout = setTimeout(later,wait);
}
if (isCallNow) {
resolve(func.apply(content,args));
content = args = null;
}
};
return new Promise(debounceHandler);
};
}