javascript总结一

20180525

  • 数据类型 (五种)
    undefined String number null undefined boolean
    +Object
(弱数据类型闭包 函数)

类型检测(5种类型)

  • typeof 适合函数,内置对象 和基本类型

    缺点对于null 返回是Object

  • instanceof 适合自定义对象和检查原生对象, obj instanceof Object

    判断 左边的原形链上是否相等
    缺点 在不同的window下 判断会不同

  • Object.prototype.toString

    Object.prototype.toString.apply(function(){}) == [object Function]

  • constructor

    可以会被改写,要注意!

  • duck type

语句

  • 块语句 block ,{}

    没有块级的作用域

  • 声明语句 var

    事实上 a 是局部变量,而b变成了全局变量;
    如果要定义两个局部变量建议:var a = 1, b = 1;

function foo(){
var a = b = 1;}
foo();

console.log(typeof a);//undefined;
console.log(typeof b);//number
  • try-catch语句(三种形式)

    try{}catch(ex){}

    try{}catch(ex){}finally{}

    try{}finally{}

  • function 函数声明 语句

//函数声明,会被预先处理
fd();//true
function fd(){
//do sth
    return true;
    }
//fe(); typeError
//函数表达式
var fe = function(){
};
  • for…in语句

    执行顺序不确定,由引擎决定
    enumerable为false时 不会出现
    for in 对象属性时受原型链影响

    • with语句(不用)

    严格模式

    ‘use strict’;
    不允许with
    更安全,向上兼容

    对象

    • 对象简述

    由一系列属性,是无序的,有字符串key 和value值
    对象结构,创建对象 var obj={};
    内置属性,writable, enumerable,configurable,value,get/set
    每个对象还有一个原型[[proto]]
    [[extensible]]属于哪个种类的,对象的extensible属性用于表示是否允许在对象中动态添加新的property

function foo(){}
foo.prototype.z=3;
var obj = new foo();
  • 原型链
function foo{}
foo.prototype.z=3;

var obj=new foo();
obj.y=2;
obj.x=1;

obj.y;//2
obj.x;//1
obj.z;//3
'z' in obj //true
obj.hasOwnProperty('z');//false

如果是赋值z在对象上,对父类不改变,相当于java中的覆盖。
对属性的操作
删除delete obj.x

函数

函数调用的四重身份

  • 作为函数
  • 作为方法
  • 作为构造函数
  • 通过它们的apply或者call方法间接调用

函数调用模式中this指全局对象(window)
 

 var f1 = function() {
    alert("这个是函数调用");
    alert(this);
  };
  f1();

由对象调用方法(当对象为null的时候,函数进行函数调用模式,当对象不为null的时候,函数实现方法调用模式)
在方法调用模式中 this 表示当前对象

 var o = {name:"赵建宇"};
  o.say = function() {
    alert(this.name);
    alert(this);
  };
  o.say();

任何一个函数放在new 后面就是构造函数,构造函数的this是构造函数返回的对象,构造函数的return发生变化,如果返回的是对象,直接返回,否则返回创建出来的对象

 var Person = function(n) {
    this.name = n;
      return {sex:"男"};
     // return 123;
  }
  var p = new Person();

语法:
  函数名.apply(对象, [参数数组]);
  函数名.call(对象, 参数列表);

 var func = function() {
    this.name = "马伦";
    this.say = function(){alert(this.name + "牛逼");};
  };
  func.apply(null);   // 等价于 func();

猜你喜欢

转载自blog.csdn.net/wqewq19/article/details/80439446
今日推荐