对象 object(属性和方法的集合)
一、创建
1.对象字面量
var o={
key:value,
key2:value2
}
- 构造函数
var o=new Object();
o.name='lisi';
o.age=20;
二、访问对象属性
1.点操作符
console.log(o.name);
2.[]
主要用于对变量的访问和复杂的标识符
变量不加"" ,其他的都要加
console.log(o["name");
console。log(o[name]);//参考for in
三、删除对象属性
delete o.name
四、检测属性
1.in:检测当前属性是否为对象的私有或继承属性,如果不是返回false
2.hasOwnProperty:检测当前属性是否为对象的私有属性,对于继承属性返回false
3.PropertyIsEnumerable:检测当前属性是否是该对象的私有属性
var o={
name:'lisi',
age:20,
gender:'men'
}
console.log("name" in o);//true
console.log(o.hasOwnProperty("name"));//true
console.log(o.hasOwnProperty("constructor"));//false
console.log(o.propertyIsEnumerable("name")) ;//true
console.log(o.propertyIsEnumerable("constructor")); //false
五、对象序列化
1.JSON.stringify:将对象类型转换为json字符串
2.JSON.parse():将json字符串转换为对象 (转换后的对象和原对象不是一个对象)
六、构造函数和原型对象
1.特点
所有的函数都有一个原型对象,所有的对象都要一个constructor属性
prototype:原型对象
constructor:构造函数
2.静态属性/方法
声明在函数本身内部,只能函数本身调用
①Object.assign(a,b):将b对象合并到a对象中 (没有创建新的,如果有相同属性,b替换a的属性)
②Object.keys():当前对象的所有属性名所组成的数组
③Object.values():当前对象的所有属性值所组成的数组
④Object.defineProperty(obj,key,{}):定义属性
大括号里面的内容:
a.基础属性描述:
value:设置属性值
writable:是否可修改,默认false(会代码提升,修改后的value会使之前的也改变)
enumerable:是否可遍历。默认false
configurable:是否可配置/删除,默认false
b.存取操作符:
不能和value同时使用
set:function 设置 this._gender _表示隐藏属性
get:function 获取/打印 return this._gender
3.非静态属性/方法
声明在函数的原型对象中,所有的实例对象都可以调用
constructor:构造者
toString()
valueOf()
hasOwnProperty()
函数 (函数是特殊的对象)
一、函数
1.普通函数:
function say(){}
say();
2.转换函数
Number()
3.构造函数 (建议首字母大写)
var o=new Object()
o.name="lisa"
二、创建
1.函数字面量
(function(){}) () 匿名函数 需要立即执行否则找不到(没有函数名,本身当作一个函数名)
var say=function(){}
say();//say是他的名字
2.函数的声明
function say(){}
say();
3.函数字面量和函数的声明的区别:function可以解析提前,先解析函数的声明,并且赋值,var可以声明提前,但是不赋值
三、函数的调用
1.函数名(参数)
2.new 函数名():普通函数用new会永远得到一个空对象,因为new一般为构造函数
3.apply()
4.call()
四、函数的参数
形参
实参
function say(a,b){
console.log(a+b);
}
say(1,2,3,4);
a,b 为形参
1, 2,3,4为实参
特点:形参个数和实参个数不一致,并且数据类型不限,js中没有重载概念,只要函数名相同,即为重写
五、函数的内部属性
1.arguments:类数组对象 (用来保存当前拥有arguments对象的函数的实参的
length:实参的个数
callee:从函数内部指向当前函数 (用arguments.callee来代替用函数名来调用,直接在内部调用)
//解析顺序:
//1.var a;var b;
//2. 1-->arguments[0]
....
5--->arguments[4]
//3.arguments[0]--->a
arguments[1]--->b
function say(a,b){
console.log(arguments); // arguments{}
console.log(arguments.length);//4
}
say(1,2,3,4)
2.this 是函数赖以生存的环境对象
①何时确定:当拥有当前this的函数被调用时确定
②this指向谁:谁调用当前拥有this的函数,那么this就指向谁
var length=10;
function enjoy(){
console.log(this.length);
}
var stu={
length:20,
enjoy:enjoy,
say:function(fun){
console.log(this.length);
fun();}
}
stu.say(enjoy); //20 10
六、作为值的函数和作为返回值的函数
1.作为值的函数
function say(){
console.log(this);
}
function getSay(fn){
fn()
}
getSay(say);//必须有函数值
2.作为返回值的函数
function say(){
return function(){
console.log("hello");
}
}
var a=say();
a();
七、函数的属性
say.length:返回形参的个数
调用函数:
修改函数内部的this值指向
say.call(this,实参列表) (想让this指向谁就指向谁)
say.apply(this,[实参列表])