1.Array.isArray():
作用:判断某个对象是否是数组
判断对象的类型:typeof
基本数据类型:
typeof 字符串 string
typeof 数值 number
typeof true|false Boolean
typeof null object
typeof undefined undefined
复杂数据类型:
typeof 对象 object
typeof 函数 function
兼容性写法:
if(typeof Array.isArray != "function"){
Array.isArray = function(obj){
return Object.prototype.toString.call(obj) == "[object Array]";
}
}
toString():返回一个对象的字符串描述。
(1)如果是object类型,就直接返回[object Object];
(2)如果是函数或数组类型,就得用Object.prototype.toString.call(对象)来获取一个对象的字符串描述。
call():借用其它对象的方法。
2.基本包装类型
String Number Boolean
作用:通过基本包装类型得到的对象可以调用方法和访问属性。
[object String]、[object Number]、[object Boolean]
-
基本包装类型对象的创建:
· new String()|Number()|Boolean()
· new Object() 参数(字符串|数值|布尔值)
· Object()
注意:
(1) String():把对象的值转换成字符串
(2) 比较(==|===) 注意==左右两边的类型是否相同,如果不同那么可能存在隐式的类型转换
eg: var str1 = new String("demo01");
var str2 = "demo01";
console.log(str1.toString()); //demo01
console.log(str1 == str2); //true(str1会先隐式的(通过toString()方法)转换为字符串,然后再跟str2比较)
(3) 基本包装类型的数据(基本类型的值),在访问属性或者是调用方法的时候,系统内部会先创建一个相对应的对象。通过这个对象来访问属性|调用方法,得到结果之后返回,然后直接销毁这个临时对象
eg:var tmpStr = new String("demo01");
var result = tmpStr.length;
str2.length = result;
tmpStr = null;
Number使用注意:
扩展Number
1.变量.方法;2.(数值).方法;
(数值):表达式
不能用数值.方法
3.Object.prototype详解:
(1)constructor 构造器属性
原型对象 与之相关联的构造函数(实例属性|原型属性)
对象 创建该对象的构造函数
(2)hasOwnProperty
作用:检测是否有某个指定的属性(不包含原型属性)
对象.hasOwnProperty("属性")
(3)isPrototypeOf|Object.getprototypeOf(对象)
作用:判断某个对象是否是指定对象的原型对象
注意点:在判断的时候会判断整条原型链
(4)prototypeIsEnumerable
作用:检查某个属性是否是可以枚举(列举)for...in
一般情况下属性都是可以枚举的,也可以自己设置成不可以枚举
(5)toString()
作用:返回一个对于该对象的字符串描述
Object类型的对象 var o = {}
返回的是[object Object]
其它类型的对象:数组|函数|String 返回字符串描述
注意点:和Number类型使用的时候,可以接受参数(几进制)
eg:var num = new Number(12);
console.log(num.toString(2)); //num的二进制:1100
(6)toLocalString
大部分情况同toString,会做本地化处理
(7)valueOf
作用:获得对象的值
基本包装类型的对象(String|Number|Boolean) 返回其对应的基本类型值
其它对象 返回的是对象本身
日期对象 Date 返回的是一个时间戳(1970)
4.静态成员和实例成员以及原型成员
静态成员:直接添加在构造函数上面的属性和方法。
实例成员:构造函数创建的实例对象上面的属性和方法。
原型成员:构造函数的原型对象上面的属性和方法。
5.Object的静态成员
(1)Object.apply
作用:借用其他对象的方法
用法: 对象.方法.apply(this绑定的对象,[参数1,参数2])
(2)Object.arguments
作用:函数每部的一个隐藏参数,这个隐藏参数用来接收实参。
它本身是一个类似于数组的结构,可以像数组一样通过下标来操作数据。但不是数组类型。
(3)Object.assign
作用:拷贝对象的属性,多个属性。
(4)Object.bind
该方法的作用同call|apply差不多。
(5)Obect.call
作用:借用其他对象的方法。
用法:对象.方法.call(this绑定的对象,参数1,参数2)
(6)Object.caller
作用:指向调用当前函数的函数。
(7)Object.create
作用:创建对象,设置原型对象。
(8)Object.getOwnPropertyDescriptor
作用:获得某个对象实例属性的描述信息
描述对象:
1 是否可以配置 configurable
如果是true,该属性可以被删除,且configurable可以设置为false;
如果是false,该属性不可以被删除,且configurable不可以再被设置为true。
2 是否可以枚举 enumerable
如果是true,那么在使用for...in循环遍历对象的时候可以列举出来,否则不能列举。
3 是否可以重写 writable
修改某个属性的值
4 具体的值 value
(9) Object.getOwnPropertyDescriptors
作用:获取多个对象实例属性的描述信息。
(10)Object.defineProperty
作用:设置对象中某个属性的描述信息
(11)Object.getOwnPropertyNames
作用:返回对象中所有实例属性的名称数组
关于是否可以枚举,不论是否可以被枚举都会返回
(12)Object.keys
作用:返回对象中所有实例属性的名称数组,只返回可以被枚举的属性
(13)Object.getPrototypeOf
作用:获得某个对象的原型对象
(14)Object.preventExtensions
作用:禁止扩展对象 不能添加任何的属性和方法
(15)Object.seal
作用:密封(封闭)对象
特点:不能够扩展对象,也不能删除对象的属性
(16)Object.freeze
作用:冻结对象
特点: 不能够扩展对象,也不能删除对象的属性,不能修改
6. 函数的创建方式
函数的声明
function 函数名称(参数1,参数2...){函数体}-
函数表达式
var 变量名 = function
[函数名可以省略]
(){函数体}若函数有名称,那么就是命名函数表达式
若函数没有名称,就是匿名函数表达式
-
使用Function构造函数来创建
var 变量名 = new Function(参数);
使用构造函数创建对象,参数类型为字符串
-
参数说明:
如果没有参数:就是一个空的函数
如果有一个参数,那么这个参数就作为新创建出来的函数的函数体
如果有多个参数,那么最后一个参数作为函数的函数体,前面的参数全部都是形式参数
7.函数内部有两个隐藏的参数
1. arguments:类似数组的结构([object Arguments]),用来接收实参
1 实参的数量小于形参的数量 不足的为undefined
2 实参的数量大于形参的数量 超出的部分会忽略 在函数内部要获得超出的部分,用arguments
2. this永远都指向一个对象(非严格模式下)
01 以普通函数方式调用 this->window
02 以对象的方法来调用 this->对象
03 new 构造函数的方式调用 this->指向内部新创建的对象
04 函数上下文的方式来调用(call|apply) this->绑定的第一个参数,如果不传递参数,那么默认指向window
3. length属性
arguments.length 实际参数的长度
函数名.length 形式参数的长度
8.with
作用:把对象的作用域延伸到{}中,主要用于缩减代码 (对象.属性.属性.属性),在{}中可以通过无前缀的方式来设置属性的值。
注意点:
01 this指向window
02 如果是添加属性,那么必须要使用前缀
03 严格模式下被禁止使用