zoukankan      html  css  js  c++  java
  • 原生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

     
  • 相关阅读:
    【图文并茂,点赞收藏哦!】重学巩固你的Vuejs知识体系
    RabbitMQ概念及控制台介绍
    RabbitMQ入门介绍及环境搭建
    C# 利用PdfSharp生成Pdf文件
    利用pdf.js在线展示PDF文档
    Python办公自动化之Excel转Word
    C#利用ServiceStack.Redis访问Redis
    Redis基础之事务
    Redis基础之配置文件
    第0天 | 12天搞定Pyhon,前言
  • 原文地址:https://www.cnblogs.com/dongfangchun/p/8995486.html
Copyright © 2011-2022 走看看