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

    使用否运算取整,是所有取整方法中最快的一种

 

posted @ 2017-01-16 16:58  没离开过  阅读(167)  评论(0编辑  收藏  举报