1.原始类型
1.1原始类型(5种)
包括:number,string,boolean,null,undefined;
这是一些简单的数据,保存在栈空间;
1.2.鉴别原始类型
使用typeof方法,
eg: console.log(10);//number;
特例:鉴别null时返回的是object;
2.引用类型(js中的对象)
2.1创建
var person = {name:"zhangsan",age:26};
console.log(person.name)//zhangsan
var child = new Object();
child.name = "zhangsan";
console.log(child.name);//zhangsan
2.2对象的解除
对象在不使用时将其解除,最好的办法是在对象变量置为null,
让垃圾收集器对内存释放;
2.3添加和删除属性
2.4引用类型的鉴别
2.4.1函数使用typeof鉴别时返回的事function,对于非函数则返回的
object
2.4.2使用instanceof操作符,
eg:
var child = new Object();
child.name = "zhangsan";
console.log(child instanceof Object);//true
2.4.3 鉴别数组的方法
a.使用instanceof操作符
b.使用arr.isArray()
1.声明
var sum = function(a,b){
return a+b;
};
function sum1(a,b){
return a+b;
}
2.参数
arguments对象,
函数的参数实际上保存在arguments对象;
3.重载 让一个函数具有多个标签名
eg:
function sum(a){
console.log(a);
}
function sum(){
console.log("apple")
}
sum("b")//apple
使用arguments模仿重载;
eg:
function sum(a){
if(arguments.length===0){
console.log("apple")
}
console.log(a);
}
sum("b")//b
4.对象的方法
4.1 this对象
4.2 改变this
方法一
call():第一个参数表示this的指向,其后的参数代表需要传入函数的参数
eg:
function sayName(name){
console.log(name+":"+this.age)
}
var lisi = {
age:12
};
var wangwu = {
age:30
};
var age = 100;
sayName.call(this,"张三");//张三:100
sayName.call(lisi,"李四");//李四:12
sayName.call(wangwu,"王五");//王五:30
方法二 apply()第一个参数this指向,第二个参数表示传入函数参数数的组形
eg:
sayName.apply(this,["张三"]);
sayName.apply(lisi,["李四"]);
sayName.apply(wangwu,["王五"]);
和call()输出结果一样
方法三 bind()
待研究
1.属性操作
1.定义属性 object.name = "张三"
2.属性检测
方法:in操作符
eg:
var child = new Object();
child.name = "zhangsan";
console.log("name" in child)//true
3.删除属性
方法:delete object.属性;
eg: delete child.name;
console.log(child.name);//undefined
4.属性枚举
方法一
eg:
var person = {name:"zhangsan",age:26};
for(key in person){
console.log(key+":"+person[key])
}
结果:name:zhangsan
age:26
方法二: Object.keys()得到可枚举属性的名字的数组
eg:
var person = {name:"zhangsan",age:26};
console.log(Object.keys(person));//["name","age"]
5.属性类型
待补充
6.属性特征
a.[[Enumerable]]:是否可以遍历该属性
b.[[Configurable]]:是否可以配置
c.改变属性特征的方法
Object.defineProperty()方法
eg:
var person = {name:"zhangsan",age:26};
Object.defineProperty(person,"name",{
enumerable:false
});
console.log(person.propertyIsEnumerable("name"));//false
d.完整的定义一个数据属性
eg:
var person ={};
Object.defineProperty(person,"name",{
value:"张三",
enumerable:true,
configurable:false,
writable:false
});
console.log(person.name);//张三
person.name = "lisi";
console.log(person.name);//张三
e.定义多个数据属性
eg:
var person ={};
Object.defineProperties(person,{
name:{
value:"张三",
enumerable:true,
configurable:false,
writable:false
},
age:{
value:25,
enumerable:true,
configurable:true,
writable:false
}
}
);
console.log(person.age);//25
f.获取属性特征
eg:
var descriptor = Object.getOwnPropertyDescriptor(person,"name");
console.log(descriptor.enumerable);//true
7.禁止修改对象
方法一:禁止扩展 Object.preventExtensions(person);
使用该方法后不能添加新的属性,可以用Object.isExtensible(person)检测是否被禁止扩展,
方法二:对象封印 Object.seal(person)
使用该方法,不能添加,也不能删除和改变,可以使用Object.isSealed(person)检测是否被封印
方法三:对象冻结 Object.freeze(person)
使用该方法不能添加,不能删除和改变,也不能写入数据,相当于一个只读的封印对象,可以使用Object.isFrozen(person)检测是否被冻结,
一.构造函数
function Person(name,age){
this.name = name;
this.age = age;
this.sayName = function(){
console.log(this.name)
}
}
var person1 = new person;
二.原型对象
几乎所有的函数都具有一个prototype属性,跟踪其原型对象,该属性是一个指向该实例使用的原型对象的指针,