• 原生js 小知识点


    #eval 接受一个字符串,并将其内容视为好像原先就写成了代码一样。

    function foo(str){
        "use strict";
        eval(str);
        console.log(a);//3

    }
    foo("var a = 3;");

    但是在严格模式下,eval会自己增加一个作用域。结果如下:

    function foo(str){
        "use strict";
        eval(str);
        console.log(a);//Uncaught ReferenceError: a is not defined

    }
    foo("var a = 3;");

    #立即执行表达式

    (function foo(num){

        console.log(3,num);

    })(45);

    也可以写成

    (function foo(num){

        console.log(3,num);

    }(45));

    #'use strict';  

    规范js的代码格式,建议每个js文件都用之

    #var ”变量提升“现象,只是声明的提升,定义或者赋值不提升

    // var 的情况
    console.log(foo); // 输出undefined
    var foo = 2;
    
    // let 的情况
    console.log(bar); // 报错ReferenceError
    let bar = 2;

    PS:const用法:
    const PI = 3.14;

    #如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。

    function myFunction() {
        carName = "Volvo";
        // 此处可调用 carName 变量
    }

    // 此处可调用 carName 变量

    # ==与===区别

        ===需要参数类型相同,==则不需要类型相同

    #js的循环

    (1)of  in区别

       of: 遍历集合本身,in则遍历每一个键值对;即,in的范围要大一些。

    var a = ['A', 'B', 'C'];
    a.name = 'Hello';

        of包含:A B C;in包含了A B C name

       XXX

    (1)forEach

      var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
      m.forEach(function (value, key, map) {
          console.log(""+key+"-"+value);
      });

    #数组的高阶函数

        (1)map  :每一个元素做操作

          var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
          var results = arr.map((x)=>{return x^2;}); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
          console.log(results);

         (2)reduce:每2个元素操作,不断迭代

      效果:[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

          var arr = [1, 3, 5, 7, 9];
          arr.reduce(function (x, y) {
              return x * 10 + y;
          }); // 13579

         (3)filter函数:过滤一些元素

       var arr = [1, 2, 4, 5, 6, 9, 10, 15];
       var r = arr.filter(function (x) {
           return x % 2 !== 0;
       });
       r; // [1, 5, 9, 15]

         (4)sort:排序

       var arr = [10, 20, 1, 2];
       arr.sort(function (x, y) {
           if (x < y) {
               return 1;
           }
           if (x > y) {
               return -1;
           }
           return 0;
       }); // [20, 10, 2, 1]

    #闭包:闭包经常用于创建含有隐藏数据的函数,闭包就是能够读取其他函数内部变量的函数。

         参看链接https://kb.cnblogs.com/page/110782/。

          http://www.ruanyifeng.com/blog/

    #闭包中的this

    https://www.cnblogs.com/nuanriqingfeng/p/5789003.html

    #call apply

    所有函数都有call apply这2个方法。如果不适用他们,那么就需要给函数 显式传入一个上下文对象,略显麻烦。

    method.call(obj);//method为方法名,obj为执行此方法的对象。

                   function sayHello() {  alert(this.name);  }

                   let me = {"name":"leo","age":22};

                  sayHello.call(me);

    call和apply的第一个参数都是对象,call后续的参数是传入的参数序列(不是数组),apply的第二个参数是一个数组。  call(obj,p1,p2,p3);          apply(obj,[p1,p2,p3]);

        function add(c,d){
            return this.a + this.b + c + d;
        }
        var s = {a:1, b:2};
        console.log(add.call(s,3,4)); // 1+2+3+4 = 10
        console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14

    #对象属性配置

    var myObject = {a:2};

    Object.getOwnPropertyDescriptor(myOjbect,"a");  //获取属性的配置

    Object.defineProperty(myOjbect,"a",{   //设定属性的配置

        value:2,

        writable:true,

        configurable:true,

        enumerable:true

    });

    //value :2                值          【好理解】

    //writable:true         可写       【好理解】

    //enumerable:true  可枚举     【如果设置为false,那么对象(含数组)的for in循环将获取不到该属性,】

    //configurable:true   可配置   【 把configurable 修改成false 是单向操作,无法撤销!】

    PS:通过configurable和writable可以添加一个常量属性。

    #取消链接的href

      href="javacript:void(0);"

    #XXXX

    XXX

       XXX

    XXX

    #XXXX

    XXX

       XXX

    XXX

    #XXXX

    XXX

       XXX

    XXX

    #XXXX

    XXX

       XXX

    XXX

    #XXXX

    XXX

       XXX

    XXX

    #XXXX

    XXX

       XXX

    XXX

    #XXXX

    XXX

       XXX

    XXX

     
  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/dongfangchun/p/8995486.html
Copyright © 2020-2023  润新知