- Array.isArray()
- 作用:判断某个对象是否是数组
- 使用方法:Array.isArray(对象)
- 返回值:布尔类型的值(true|false)
- 注意点:兼容性问题(ES5)
- typeof
- 作用:用于判断数据的类型(基本数据类型 + 复杂数据类型)
- 基本数据类型:
字符串 string
数字 number
true|false boolean
null object(!)
undefined undefined
- 复杂数据类型:
对象类型 object
函数类型 function
- toString
- 返回的是对当前对象的字符串描述
- 例子:
var arr1= [1,2,3];
console.log( arr1.toString()); //1,2,3
- Object和Function的关系
- Object的类型是一切对象的根类型。
- Function是Object的原型对象 Object是Function的原型对象。
- 成员 : 属性 + 方法
- 实例成员:
对象自己的属性和方法(name)
- 原型成员
对象的原型对象上面的属性和方法(showName)
- 静态成员
直接把属性或者是方法写在构造函数身上。(des|showDes)
function Person() {
this.name = "默认" //实例成员
}
Person.prototype.showName = function () { //原型成员
console.log(this.name);
}
var p1 = new Person();
Person.des = "默认的描述信息"; //静态成员
Person.showDes = function () { //静态成员
console.log(this.des);
}
Person.showDes();
Object的静态成员
- 1.Object.apply
- 作用:借用其他对象的方法
- 使用方法:对象1.方法.apply(对象2,[参数1,参数2..])
- 2.Object.arguments
- 作用:用来接收函数调用时候传入的实参。这是一个隐藏的参数,在函数中使用。
- 3.Object.assign
- 作用:拷贝属性,特点(一次性拷贝多个对象的属性)
- 使用方法: Object.assign(目标对象,要拷贝属性的对象1,要拷贝属性的对象2...)
- 4.Object.bind
- 作用:绑定对象调用方法,同call和apply几乎是一样
- 5.Object.call
- 作用:借用其他对象的方法
- 使用方法:对象1.方法.call(对象2,参数1,参数2..)作用:
- 6.Object.caller
- 作用:谁调用当前的方法,那么就指向谁
- 7.Object.create
- 作用:创建对象并且设置该对象的原型对象
- 使用方法: Object.create(要设置为新对象的原型对象)
- 8.Object.getOwnPropertyDescriptor
- 作用: 获取对象中某个属性的描述信息(描述对象)
- 属性的描述信息:
01 该属性对应的值
02 该属性是否是可枚举的enumerable 能不能用for..in 列举出来。
03 该属性是否是可配置的configurablechul
如果是可配置的,该属性可以被删除,并且可以被修改为不可配置的
如果是不可配置的 该属性不可以被删除 并且不可以被修改为可配置的
04 该属性是否是可重写的writable
该属性是否可以被修改
- 9.Object.getOwnPropertyDescriptors
- 作用:获得对象中多个属性的描述信息
- 10.Object.defineProperty
- 作用:用来设置对象中某个属性的描述信息(对象)
- 使用方法:Object.defineProperty(对象,属性,描述对象 )
- 描述属性注意点:
如果是已经存在的属性,在设置的时候,如果我们省略不写,那么默认值全部都是true
如果是新增加一个属性,在设置的时候,如果我们省略不写,那么默认值全部都是false
- 11.Object.getOwnPropertyNames
- 作用:获得对象所有的实例属性名(key),返回值是一个数组。不论该属性是否是可枚举的,都可以获取
- 使用方法:Object.getOwnPropertyNames(对象)
- 12.Object.keys
- 作用:获取对象所有的实例属性名(key),获取的是所有可枚举的。
- 13.Object.getPrototypeOf
- 作用:获取原型对象
- 14.Object.preventExtensions|Object.isExtensible
- 作用:禁止对象扩展(不能给对象添加属性或者是方法)
- 15.Object.seal
- 作用:密封对象(对象不能添加成员 + 不能删除成员)
- 16.Object.freeze
- 作用:冻结对象(对象不能添加成员 + 不能删除成员 + 不能修改成员)
函数的创建方式
- 函数声明 function 名称(参数){函数体}
- 函数表达式 var fun = function 名称(参数){函数体}
- 命名函数表达式: var fun = function 名称(参数){函数体}
- 匿名函数表达式:var fun = function (参数){函数体}
- 即时函数:(function(){})()
- 使用构造函数来创建Function
其他
- callee
- 作用: 指向的是函数自己,常用于递归调用中。
- 递归:自己调用自己。要有退出(结束)条件。
- caller
- 作用:指向的是函数的调用者
- 注意点:window来调用函数的时候,指向的是null而不是window
- with
- 作用:可以缩减代码
- 使用方法:with(对象){}
在{}中可以通过无前缀的方式来操作对象的成员
- 注意点:
1 this的指向->window
2 在{}中不能使用没有前缀的方式来添加成员,如果要添加成员必须要使用前缀
3 会破坏js代码的词法作用域,性能降低
4 严格模式下已经被禁止
闭包也可以解决with能解决的问题
var div = document.getElementById("demo");
(function (t) {
t.height = "100px";
t.width = "200px";
t.backgroundColor = "red";
})(div.style)
- 私有变量和函数(私有成员)
在构造函数内部声明的变量或者是函数,共函数内部使用,在外部无法访问。
- 特权方法:
对象的方法 + 可以访问私有的变量
function Car(type,number) {
this.type = type; //公共的属性
this.number = number;
var city = "广州"; //私有变量
var getNumber = function () { //私有函数
return number;
};
var getType = function () {
return type;
};
//能够访问私有变量和函数的方法 --- 特权方法
this.getDescription = function () {
console.log(getNumber() + getType() + city);
}
}
var car = new Car("汽车","201718");
car.getDescription();
-
this指向的是一个对象
说明 函数的调用方式会影响到函数内部this的指向
001 对象.方法 以对象的方法来进行调用 this->对象本身
002 以普通函数方式进行调用 this->window(非严格模式)
003 以构造函数的方式来调用 this->新创建的对象
004 函数上下文call|apply this->绑定的第一个参数