一.对象
在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象是由属性和方法组成的:
属性:事物的特征,在对象中用属性来表示(常用名词)
方法:事物的行为,在对象中用方法来表示(常用动词)
1.对象的创建
1.利用字面量创建对象
对象字面量:就是花括号 { } 里面包含了表达这个具体事物(对象)的属性和方法
{ } 里面采取键值对的形式表示
键:相当于属性名
值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型,函数类型等)
例如:var star = {
name : 'red',
age : 18,
sex : '男',
sayHi : function(){
alert('大家好啊~');
}
};
// 多个属性或者方法中间用逗号隔开
// 方法冒号后面跟的是一个匿名函数
2.利用new Object创建对象
var 对象名 = new Object();
例如: var obj = new Object(); //创建了一个空的对象
obj.name = ‘小罗’;
obj.age = 18;
obj.sex = '女';
obj.sayHi = function() {
console.log('hi~');
}
//1.我们是利用等号赋值的方法添加对象
//2.每个属性和方法之间用分号结束
3.利用构造函数创建对象
构造函数 :是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
function 构造函数名() { //构造函数语法格式
this.属性 = 值;
this.方法 = function() {}
}
new 构造函数名();
例如:
function Star(name,age,sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sing = function(sang){
console.log(sang);
}
}
var xl = new Star('小罗',18,'女');
console.log(typeof xl) // object对象,调用函数返回的是对象
注意:构造函数名字首字母要大写
函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
构造函数中不需要 return 返回结果。
当我们创建对象的时候,必须用 new 来调用构造函数。
2.对象的调用访问
对象里面的属性调用 : 对象.属性名 ,这个小点 . 就理解为‘的’。
对象里面属性的另一种调用方式 : 对象[‘属性名’],注意方括号里面的属性必须加引号。
对象里面的方法调用:对象.方法名() ,注意这个方法名字后面一定加括号
console.log(star.name) // 调用名字属性
console.log(star['name']) // 调用名字属性
star.sayHi(); // 调用 sayHi 方法,注意,一定不要忘记带后面的括号
3.遍历对象的属性
for...in 语句用于对数组或者对象的属性进行循环操作。
语法如下
for(变量 in 对象名字){
// 在此执行代码
}
语法中的变量是自定义的,它需要符合命名规范,通常我们会将这个变量写为 k 或者 key。
for(var k in obj) {
console.log(k); //这里的 k 是属性名
console.log(obj[k]);//这里的 obj[k] 是属性值
}
var obj = {
name: '小罗',
age: 18,
sex: '女',
fn:function() {};
};
console.log(obj.name);
console.log(obj.age);
console.log(obj.sex);
//for in 遍历我们的对象
//for (变量 in 对象){}
//我们使用for in 里面的变量 我们喜欢写k 或者key
for(var k in obj){
console.log(k); // k 变量 输出得到的是属性名
console.log(obj[k]); // obj[k] 得到的是属性值
}
4.删除对象中的属性
delete只是断开了属性和宿主对象的联系,而不会操作属性中的属性,并且delete只会删除自有属性,不能删除继承属性。可以用循环遍历删除内容。
语法:delete 属性访问表达式 例如: delete stu.name //删除学生对象中的name属性。
5.新增属性并赋值
Obj.newproname=”value”
6.检测属性
in 检测某属性是否是某对象的自有属性或者是继承属性
hasOwnProperty()检测给定的属性是否是对象的自有属性,对于继承属性将返回false
propertyIsEnumerable() 检测给定的属性是否是该对象的自有属性,并且该属性是可枚举的通常由JS代码创建的属性都是可枚举的,但是可以使用特殊的方法改变可枚举性。
例如:
var o = {
x:1
}
o.hasOwnProperty("x"); //true,x 为o的自有属性
o.hasOwnProperty("y"); //false,o 中不存在属性y
o.hasOwnProperty("toString"); //false,toString为继承属性
student.propertyIsEnumerable(“toString”); //false,不可枚举
7.原型
Object 类型所具有的任何属性和方法也同样存在于其他对象中,任何对象继承于 Object对象。
Object中常用的方法:
constructor: //保存用户创建当前对象的函数
hasOwnProperty(propertyName); //检查给定的属性名是否是对象的自有属性。
toString(); //返回对象的字符串表示
valueOf(); //返回对象的字符串数值,布尔值的表示 propertyIsEnumerable(propertyName); //检查给定的属性在当前对象实例中是否存在 。
isPrototypeOf(object); //检查传入的对象是否是原型
toLocaleString(); //返回对象的字符串表示,该字符串与执行环境的地区对应
8.对象序列化
将对象转换为字符串的描述,解决对象在io中传递的问题
常规转换
obj.toString()
转换为json字符串
JSON.stringify(obj)
转换为查询字符串
var qs = require('querystring')
qs.stringify(obj)
二.函数
1.函数定义与作用
函数:就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。
函数的作用:
功能的封装,直接调用,代码复用率提高
构建对象的模板(构造函数)
函数实际上是对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法,由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。
2.函数声明
//声明函数
function 函数名(){