《了不起的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__ 设置属性
-

浙公网安备 33010602011771号