《了不起的NodeJS》书籍笔记一

前言

最近刚使用ReactNative开发完公司的app,感觉不能再爽了~😄对js又有了更深的一层理解。闲暇时就翻开这本书看了看,顺便记下一些书籍笔记,便于巩固自己的js。

JavaScript基础

类型

  • 基本类型5种

    • number
    • boolean
    • string
    • null
    • undefined
  • 复杂类型3种

    • array
    • function
    • object
  • 在条件表达式中,一些特定的值会被判定为false:

    • null
    • undefined
    • ''
    • 0

函数

  • THIS
    • 使用call,apply方法可以改变this的值
    • 区别:call接受参数列表,apply接受一个参数数组
  • 参数数量Length
    • 该属性指明函数声明时可接受的参数数量。在JavaScript中,该属性名为Length
var a =function(a,b,c);
a.length===3;//true
  • 闭包
    • 概念:闭包就是能够读取其他函数内部变量的函数。(摘自阮一峰大大的描述)
    • 我自己的理解就是在该函数作用域之外,还存在对该函数中变量的引用
    • 注意:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
  • 自执行函数
    • 自执行函数是一种机制,通过这种机制声明和调用一个匿名函数,能够达到仅定义 一个新作用域的作用
    • 自执行函数对声明私有变量是很有用的,这样可以让私有变量不被其他代码访问
    • JavaScript中没有class关键词。只能通过函数来定义;
    • 要给所有Animal实例定义函数,可以通过prototype属性来完成;
    • 在prototype的函数内部,this并非像普通函数那样指向global对象,而是指向通过该类创建的实例对象;
    function Animal(name){
        this.name=name;
    };
    Animal.prototype.eat=function(food){
        //eat method
    }
    
  • prototype继承链
    • JavaScript有基于原型的继承的特点。
    function Animal(){
        this.eat=function(food){
            alert('eat '+food.toString());
        }
    };
    function Ferret(){};
    //实现继承
    Ferret.prototype=new Animal();
    //为子类添加属性和方法
    Ferret.prototype.name='Ferret';
    Ferret.prototype.eat=function(food){
        Animal.prototype.eat.call(this,food);
    }
    
  • V8中的JavaScript
    • OBJECT#KEYS 获取对象上所有的自有键

    • ARRAY#ISARRAY 判断当前对象是否一个数组

    • 数组方法

      • forEach 遍历数组(注意,该方法使用break,continue,return均无效)
      • filter 过滤数组元素
      • map 映射返回数组元素
      • reduce 接受一个函数作为累加器
      参数 描述
      function(total,currentValue, index,arr) 必需。用于执行每个数组元素的函数。
      initialValue 可选。传递给函数的初始值
      函数参数 描述
      total 必需。初始值, 或者计算结束后的返回值。
      currentValue 必需。当前元素
      currentIndex 可选。当前元素的索引
      arr 可选。当前元素所属的数组对象。
      • reduceRight 与reduce一样,不过是从右到左
      • lastIndexOf 返回一个指定的字符串值最后出现的位置
    • 字符串方法

      • trim 移除字符串首末的空格
    • JSON

      • JSON.stringify 将js对象序列化为json对象
      • JSON.parse 将json对象反序列化为js对象
    • FUNCTION#BIND 改变对this的引用,并返回一个新的方法

    • FUNTION#NAME 返回函数的名称

    • __PROTO__(继承) 使得定义继承链变得更加容易,免去了如下的工作:

      • 借助中间构造器
      • 借助OOP的工具类库。无须再引入第三方模块来进行基于原型继承的声明。
    • 存取器

      • __defineGetter__ 访问属性
      • __defineSetter__ 设置属性
posted @ 2017-07-11 10:14  🐟🐟  阅读(481)  评论(0)    收藏  举报