美文网首页
js notebook

js notebook

作者: 大水啊大水 | 来源:发表于2017-03-01 22:50 被阅读109次

    1. this 作用域

    var foo = 0
    function main() {
        alert(foo)  //此时foo同this.foo,为0
        //var foo = 2  //加上该句后foo为undefined,this.foo依然为0
    }
    main()  //执行结果为0
    new main()  //该情况下函数内this指向该函数,this.foo为undefined
    

    2. arr技巧

    //arr+''或arr.toString()可以方便拍平arr,如
    var arr = [1, [2, 3], [4, 5], 6]
    console.log(arr+'')  //输出字符串1, 2, 3, 4, 5, 6
    console.log(arr.toString())  //输出字符串1, 2, 3, 4, 5, 6
    console.log(arrStr.split(','))  //输出数组[1, 2, 3, 4, 5, 6]
    

    3. cookie的基本操作

    读取、写入和删除

        var CookieUtil = {
          get: function(name) {
            var cookieName = encodeURIComponent(name) + '=', cookieStart = document.cookie.indexOf(cookieName), cookieValue = null
    
            if(cookieStart > -1) {
              var cookieEnd = document.cookie.indexOf(';', cookieStart)
              if(cookieEnd === -1) {
                cookieEnd = document.cookie.length
              }
              cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd))
            }
            return cookieValue
          },
          set: function(name, value, expires, path, domain, secure) {
            var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value)
            if(expires instanceof Date) {
              cookieText += ';expires=' + expires.toGMTString()
            }
            if(path) {
              cookieText += ';path=' + path
            }
            if(domain) {
              cookieText += ';domain=' + domain
            }
            if(secure) {
              cookieText += ';secure=' + secure
            }
            document.cookie = cookieText
          },
          unset: function(name, path, domain, secure) {
            this.set(name, "", new Date(0), path, domain, secure)
          }
        }
    

    4. call, apply, bind

    深入浅出妙用 Javascript 中 apply、call、bind
    apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
    apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;
    apply 、 call 、bind 三者都可以利用后续参数传参;
    bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用

    5. prototype记录(关于是否会修改原值有些混乱,待整理)

    Js 数组——filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()
    Array.prototype.valueOf()
    Array.prototype.toString() //toLocaleString,使用本地分隔字符
    Array.prototype.concat(args/array)
    Array.prototype.join(seperate)
    Array.prototype.shift() //返回删除的第一项,原arr被修改
    Array.prototype.pop() //返回删除的最后一项,原arr被修改
    Array.prototype.push(args) //往数组后面添加,返回添加后的arr长度,原arr被修改
    Array.prototype.unshift(args) //往数组前面添加,返回添加后的arr长度,原arr被修改
    Array.prototype.reverse() //原arr被修改
    Array.prototype.sort() //原arr被修改
    Array.prototype.forEach(function)

    Array.prototype.map(function) //返回新的数组,不修改原arr,function(x)直接return对数组元素x的操作

    var str = '12345';
    Array.prototype.map.call(str, function(x) {
      return x;
    }).reverse().join(''); //等同str.split('').reverse().join(''),原str不会被修改
    
    // Output: '54321'
    // Bonus: use '===' to test if original string was a palindrome判断回文
    
    

    Array.prototype.filter(function) //function(x)直接return满足条件的x(条件式)
    Array.prototype.some(function) //若array中有一项满足function中的表达式,则返回true
    Array.prototype.every(function) //array中的每一项满足function中的表达式才返回true
    Array.prototype.reduce(function, x) //其中x为参数传入function(x, y),遍历数组元素y,累加器

    var sum = [0, 1, 2, 3].reduce(function(acc, val) {
      return acc + val;
    }, 0);
    // sum is 6
    
    //展开数组嵌套
    var list1 = [[0, 1], [2, 3], [4, 5]];
    var list2 = [0, [1, [2, [3, [4, [5]]]]]];
    
    const flatten = arr => arr.reduce(
      (acc, val) => acc.concat(
        Array.isArray(val) ? flatten(val) : val
      ),
      []
    );
    flatten(list1); // returns [0, 1, 2, 3, 4, 5]
    flatten(list2); // returns [0, 1, 2, 3, 4, 5]
    

    Array.protorype.slice(start, end) //[start, end),start和end可为负,start和end可为空,不修改原arr,返回新字符串
    Array.prototype.splice(start, deleteNum, insertArgs) //deleteNum可为空,如果有删除项返回删除项,原arr被修改

    参数数组化,相当于...args
    function list() {
      return Array.prototype.slice.call(arguments);
    }
    var list1 = list(1, 2, 3); // [1, 2, 3]
    
    var unboundSlice = Array.prototype.slice;
    var slice = Function.prototype.call.bind(unboundSlice);
    function list() {
      return slice(arguments);
    }
    var list1 = list(1, 2, 3); // [1, 2, 3]
    

    String.prototype.replace(被取代的,新的) //返回新字符串
    String.prototype.substr(start, length) //表示从start(可为负)开始截取length长度,返回新字符串
    String.prototype.substring(start, end) //[start, end),start和end不可为负,但可以调换位置,小值为start,大值为end,返回新字符串

    6. 简单记录一下各类型的判定

    function isNumber(obj) {
      return obj!== undefined && typeof(obj) === 'number' && !isNaN(obj);
    }
    
    Array.isArray(arr)
    

    Math.pow(x, y) //x的y次幂

    JS trick

    In JavaScript, why is “0” equal to false, but when tested by 'if' it is not false by itself?

    相关文章

      网友评论

          本文标题:js notebook

          本文链接:https://www.haomeiwen.com/subject/gxicgttx.html