[聚合文章] 2017.12.11-学习笔记:js进阶知识点整理

JavaScript 2017-12-19 19 阅读

前言:古人云,温故而知新,把自己学习js的进阶笔记整理一下,有错误之处还望指出,谢谢。

→点我去看js基础知识点整理

JavaScript进阶

1.typeof:
  • 1.返回的是一个字符串;
  • 2.只能判断简单数据类型,复杂数据类型用instanceof
  • 3.是一个关键字,不是一个函数,()的作用:提升优先级;
  • 4.如果是一个函数,返回的是function,函数在js里是一等公民;
  • 5.如果是null,返回的是object。
2.逻辑运算符:
  • 逻辑中断:
    && : 找假值, 从左往右依次判断,如果某个操作数的逻辑是false,中断。
    || : 找真值, 从左右往右依次判断,如果某个操作的逻辑是true,中断。

  • 转换成布尔类型是false的几种情况:
    null undefined 0 NaN "" false

  • 使用场景:

function animate(fn) {  fn && fn(); //如果传参数函数就执行函数}animate();
3.比较运算符:
  • == 的转换规则:
    1. NaN 不等于任何值 包括NaN本身
    2. null 不等于任何值, 除了null 和 undefined
    3. undefined不等于任何值, 除了undefined本身和null
    4. 如果两边有布尔类型, 两边都转换成数值类型比较 false:0 true:1
    5. 如果两边有数值类型, 两边都转换成数值类型。
    6. 如果两边没有数字和布尔类型,有字符串,都转换成字符串比较。
    7. 如果两边都是对象,比地址。
      Number( [ 空数组 ] )为 0 ;Number( { 空对象 } )为 NAN。
4.严格模式:
  • 开启严格模式:’’use strict’’
    1.变量必须声明;
    2.禁止this指向window对象;
    3.禁用八进制。
5.数据类型:
  • 简单数据类型:值类型,存储的是值本身;
  • 复杂数据类型:引用类型,存储的是对象的地址,复制的地址,对象只有一个,两个变量指向同一个对象。
6.拷贝:
  • 浅拷贝:将对象中所有的属性都依次赋值到新对象里面去。浅拷贝只复制了一层对象的属性
    如果对象中的属性还有对象,那浅拷贝只能复制该对象的地址,所以复制后该属性的对象和原属性的对象是同一个。

  • 深拷贝:判断原对象的属性值的数据类型是否为对象typeof obj[k] === 'object'
    利用递归 temp[k] = cloneObj(obj[k]); 实现。

7.对象:无序的键值对的集合。
  • 面向过程:员工,一步一步考虑做事的过程;
    面向对象:老板,让谁做什么事。
    面向对象是面向过程的封装,而不是替代。

  • 面向对象的三大特性:

    • 1.封装:
      函数:封装一段代码。
      对象: 把一些属性和函数封装到一个对象了。
    • 2.继承:
      拿来主义:一个对象没有这个属性或者方法,另一个对象有个这个属性或者方法,通过某些手段,能够直接用另一个对象的属性和方法。
    • 3.[多态]:js中没有,只有强类型语言有。
  • 创建对象的方式:

var obj = new Object();var obj={}; // 字面量创建;//工厂函数:每次调用,都会创建出来一个对象。function createPhone(brand) {  var obj = {    brand: brand  }  return obj;}// 缺点:创建出来的对象全是object类型,无法区分。/*构造函数:实例化对象  1. 首字母大写  2. 作用: 实例化对象(给this添加属性和方法)  3. 配合new关键字使用,如不配合new,this指向window*/function Phone(brand) {  this.brand = brand;}// 缺点:内存浪费;改进:用原型'var hw = new Phone("华为");
  • new关键字:
    1. 在内存开辟一块新的空间,创建一个空的对象
    2. 让构造函数的this指向这个新的对象
    3. 调用构造函数
    4. 返回新对象。
8.prototype:原型对象
    1. 所有的函数(构造函数)都会自带一个属性:prototype 这个属性是一个对象: 原型对象。
    2. 通过构造函数实例化的对象 可以直接访问prototype属性(原型对象)的属性和方法。
  • 构造函数中相同的属性和方法可以放入其对应的原型对象中。
    对象: 存储每个不一样值 (name, age , gender)
    原型:存储所有对象共同的东西(方法)

  • 所有的函数都会有一个属性:prototype 指向其 原型对象
    所有的对象都会有一个属性:_proto_ 指向当前对象的构造函数的 prototype 属性。
    所有的原型对象都会有一个属性:constructor 指向当前 构造函数

  • 属性搜索原则:
    如果自己有,用自己的,如果没有,找对象._proto_,如果还没有,一直往上找,知道Object.prototype,如果没有,undefined。

9.原型链:
  • 一个对象会有一个原型(对象._proto_),同时这个原型也是一个对象,这个原型也会有原型,一环扣一环,就形成了一个链式的结构,我们把这个链式结构叫做;原型链

  • 对象可以使用原型上的东西,也可以使用原型的原型的东西,对象可以使用整个原型链上的东西。

1.var p = new Person();p-- > Person.prototype-- > Object.prototype-- > null2.var arr = [];arr-- > Array.prototype-- > Object.prototype-- > null3.var date = new Date();date-- > Date.prototype-- > Object.prototype-- > null4.var obj = {}obj-- > Object.prototype-- > null5. Math对象Math-- > Object.prototype-- > null
10.Object.prototype的成员:
  • obj.hasOwnProperty(prop) :判断prop属性是否是obj自己提供
    in操作符:如果属性不是自己提供的,是从原型上继承来的,也会返回true

  • obj.propertyIsEnumerable(prop) : 判断prop是否是自己的属性, prop属性可否遍历

  • obj1.isPrototypeOf(obj2): 判断obj1是否在obj2原型链上。

  • toString(): Object.prototype.toString() [object type] 将对象转换成字符串

  • toLocaleString():跟本地化有关,

  • valueOf() : 将对象转换成简单类型(数值、布尔)

11.沙箱:匿名函数自调用
  • 优点:不用担心全局变量污染的问题
    缺点:完全与外界隔绝
    对外暴露变量:传递window作为参数传入,window.变量=变量
12.继承:让一个对象可以使用另一个对象的属性和方法。
  • 混入式继承:
function extend(obj1, obj2) {  for (var k in obj2) {    obj1[k] = obj2[k];  }}obj.extend({  sayHi: function() {    console.log('hehe');  }})
  • 原型式继承:
    一个对象可以访问构造函数的原型中的属性和方法,那么如果想要让一个对象增加某些属性和方法,只需要把这些属性和方法放到原型对象中即可。
// 1.直接给原型增加属性和方法// 2.原型替换(注意:constructor)换老王Person.prototype = {  constructor: Person,  name: "zs",  sayHi: function() {}}// 3.mixin+原型:不换原型,给原型混入Person.prototype.extend = function(obj) {  for (var k in obj) {    this[k] = obj[k];
                

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。