zoukankan      html  css  js  c++  java
  • JavaScript 学习笔记(一)

    1.javascript中,值包括原始值对象,原始值包括布尔值、数字、字符串、null和undefined,其他的值为对象。

      原始值的特点:(1)按值进行比较:3===3> true; 'abc'==='abc'> true      

                         (2)属性不能改变、添加和移除  var src='abc'; str.length=1; str.length> 3   str.foo=3; str.foo> undefined

      对象:包括简单对象、数组、正则表达式,特点:(1)按引用进行比较 {}==={}> false      var obj1={}; var obj2=obj1; obj1===obj2> true

                                                                   (2)属性可以自由被改变、添加和移除  var obj={}; obj.foo=123; obj.foo> 123

    2. undefined:没有值,未被初始化的变量即为undefined,丢失的参数,访问不存在的属性

      null:没有对象,表示空值

     undefined和null没有属性,也没有方法, 可被看做false

    3. 对值分类:typeof和instanceof

                     typeof主要用于原始值,instanceof主要用于对象

                     typeof undefined> 'undefined'  typeof null> object ,但是null不是一个对象

                     null instanceof object> false   undefined insteanceoof object> false

     4. 被解释为false的值:undefined、null、false、0、NaN、'' ,其他值被解释为true

     5. &&:可以返回布尔值,也可为其他值,如果第一个运算数是的,返回它,否则返回第二个运算数 NaN&&'abc'> NaN  123&&'abc'> 'abc'

          ||: 可以返回布尔值,也可为其他值,如果第一个运算数是的,返回它,否则返回第二个运算数 'abc'||123> 'abc'  ''||123> 123

    6. 所有的数字都是浮点数 1===1.0> true, 还有特殊的数字:NaN,Infinity, Infinity比任何数字大(除了NaN),-Infinity比任何数小(除了NaN)

    7. 函数声明具有提升特性—它们的实体会被移动到所在作用域的开始处。这使得我们可以引用后面声明的函数。

      function foo(){
    
                        bar();  //Ok
    
                       function bar(){
    
                                }
    
                }

           注意,var 声明赋值不具备该特性,

                   function foo(){
    
                              bar(); //Not OK
    
                              var bar=function(){
    
                                       }
    
                          }

       8. 函数内的arguments不是数组,只是类似数组,有length属性,可以通过[]访问每个参数,但是不能对它调用数组的方法, 可以通过toArray()方法将它变为数组

       9.  一个变量的作用域总是完整的函数:

    1 function foo(){ 
    2        var x=-1;
    3        if(x<0)
    4          {
    5             var tmp=-x;
    6         }
    7      console.log(tmp); // 1
    8 }

     10. 所有的变量声明都会被提升,声明会被移动到函数的开始处,而赋值还在原来的位置进行

    function foo(){
    
      console.log(tmp);// undefined
    
      if(false)
      {
          var tmp=3;
      }
    }

     11. 闭包:每个函数和它周围的变量保持着连接,哪怕离开被创建时的作用域也是如此。函数以及它所连接的周围作用域中的变量即为闭包。 

    function foo(s){
           return function(){
                   s++;
                   return s;
        }
    }
    
     var inc=foo(5);
     inc();// 6
     inc();//7
     inc();//8
     

    12.  IIFE模式(立即调用表达式):引入新的作用域 , 防止一个变量变成全局变量

    (function(){   //开启IIFE
       
         var tmp=...;// 非全局变量
      
    }());

       用例:解决闭包造成的无意共享

    result=[];
    for(var i=0;i<5;i++)
    {
      (function(){
          var i2=i; //复制i
          result.push(function(){ return i2});
    
       }();)
    
    }
    
    
    console.log(result[1]());//1
    console.log(result[3]());//3

     13. 两种面向对象机制:单一对象和构造函数

           对象可以认为是一组属性的集合,使用in 运算符检查属性是否存在,使用delete运算符移除属性

           任意属性名:使用引号括起来,用方括号获取和设置

    var obj={'not a identifier': 123};
    
    >obj['not a identifier']
        123
    >obj['not a identifier']=456;
    
    //方括号可以动态计算
    >obj['not a'+'identifier']
       123

     14. var func2=obj.func.bind(obj);  //使用bind()方法提取一个对象中的方法

                       

  • 相关阅读:
    全面了解Nginx主要应用场景
    手把手教你构建 C 语言编译器
    Docker镜像原理和最佳实践
    Docker网络深度解读
    PostgreSQL 10.0 preview 功能增强
    阿里沈询:分布式事务原理与实践
    CPU、内存、IO虚拟化关键技术及其优化探索
    原理、方法双管齐下,大神带你细解Redis内存管理和优化---场景研读
    ASP.NET 5已终结,迎来ASP.NET Core 1.0和.NET Core 1.0 转
    RabbitMQ学习系列
  • 原文地址:https://www.cnblogs.com/njust-ycc/p/5938604.html
Copyright © 2011-2022 走看看