JavaScript 小技巧汇总
- 判断一个变量是否申明
-
if (typeof v === "undefined") { // ... }
- 判断一个变量是否是函数
-
function f() {} typeof f // "function"
- 区别一个变量是数组还是对象
-
var o = {}; var a = []; o instanceof Array // false a instanceof Array // true
- base64转码 (btoa 直接使用中文会出错)
-
var string = 'Hello World!'; btoa(string) // "SGVsbG8gV29ybGQh" atob('SGVsbG8gV29ybGQh') // "Hello World!"
function b64Encode(str) { return btoa(encodeURIComponent(str)); } function b64Decode(str) { return decodeURIComponent(atob(str)); } b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE" b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"
- 查看对象所有属性(本身的属性,不包含继承的)
-
var o = { key1: 1, key2: 2 }; Object.keys(o); // ['key1', 'key2']
- 判断对象是否有某个属性
-
var o = new Object(); o.hasOwnProperty('toString') // false 'toString' in o // true
hasOwnProperty 判断对象本身 ,而 in 会判断对象父类
- 只想遍历对象自身属性
-
for (var key in person) { if (person.hasOwnProperty(key)) { console.log(key); } }
- 遍历类数组对象
-
// for循环 function logArgs() { for (var i = 0; i < arguments.length; i++) { console.log(i + '. ' + arguments[i]); } } // forEach方法 function logArgs() { Array.prototype.forEach.call(arguments, function (elem, i) { console.log(i+'. '+elem); }); }
- 数组的遍历
-
var a = [1, 2, 3]; a.foo = true; for (var key in a) { console.log(key); } // 0 // 1 // 2 // foo
for ... in 循环会遍历非数组key
-
// for循环 for(var i = 0; i < a.length; i++) { console.log(a[i]); }
var colors = ['red', 'green', 'blue']; colors.forEach(function (color) { console.log(color); });
- 获取当前时间戳
-
var timestamp=new Date().getTime();
- 时间转时间戳
-
// 也很简单 var strtime = '2014-04-23 18:55:49:123'; var date = new Date(strtime); //传入一个时间格式,如果不传入就是获取现在的时间了,这样做不兼容火狐。 // 可以这样做 var date = new Date(strtime.replace(/-/g, '/')); // 有三种方式获取,在后面会讲到三种方式的区别 time1 = date.getTime(); time2 = date.valueOf(); time3 = Date.parse(date); /* 三种获取的区别: 第一、第二种:会精确到毫秒 第三种:只能精确到秒,毫秒将用0来代替 比如上面代码输出的结果(一眼就能看出区别): 1398250549123 1398250549123 1398250549000 */;
- 时间格式化
-
function timetrans(date){ var date = new Date(date*1000);//如果date为10位不需要乘1000 var Y = date.getFullYear() + '-'; var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'; var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' '; var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'; var m = (date.getMinutes() <10 ? '0' + date.getMinutes() : date.getMinutes()) + ':'; var s = (date.getSeconds() <10 ? '0' + date.getSeconds() : date.getSeconds()); return Y+M+D+h+m+s; }
- 对一个数进行取整
-
2.9 | 0 // 2 -2.9 | 0 // -2 ~~2.9 // 2 ~~47.11 // 47
使用否运算取整,是所有取整方法中最快的一种