对象进阶
# 对象进阶
# 1、创建对象的三种方式
构造函数:
let obj =new Object();
obj.name="john";
2
let obj =new Object({name:"john"});
字面量:
let obj = {name:"john"}
# 1.1 自定义构造函数(构造函数入门):
构造函数是一种特殊的函数,用来初始化对象
构造函数允许自己构造一个模版来创建类似的对象
构造函数约定:
- 命名只能以大写开头
- 只能用new操作符来执行
示例
function Person(name,age,phone){
this.name=name;
this.age=age;
this.phone=phone;
}
let man =new Person("john",19,17788889999);
console.log(man.name);//john
2
3
4
5
6
7
说明:
- 1.使用 new 关键字调用函数的行为被称为实例化
- 2.实例化构造函数时没有参数时可以省略()
- 3.构造函数内部无需写return,返回值即为新创建的对象
- 4.构造函数内部的 return 返回的值无效,所以不要写return 5.new object ()
- new Date () 也是实例化构造函数
# 1.1.1 实例成员&静态成员
实例成员:实例对象的属性和方法都叫实例成员
静态成员:构造函数也就是类的方法和属性,重点是以类为基准,看示例
function Person(name, age, phone) {
this.name = name;
this.age = age;
this.phone = phone;
}
Person.eyes=2;
Person.eat =function(){console.log("eating...");};
let man = new Person("john", 19, 17788889999);
console.log(man.eyes);//2
Person.eat();//eating...
2
3
4
5
6
7
8
9
10
11
# 1.1.2 内置构造函数
基本数据类型有6种:字符串,数值,布尔,undefined,null
引用数据类型 : 对象
内置构造函数:
- 引用类型: Object, Array, RegExp, Data等
- 包装类型: String, Number, Boolean等
示例:
let str ="john"//等同于 let str =new String("john"),这个构造函数是js内置的,封装了很多方法
console.log(str.length);//4
2
# 1.1.3 Object内置静态方法
# 1. Object.keys()
拿到对象所有的键,并返回一个数组
let arr=Object.keys(man);
console.log(arr);//["name","age","phone"]
2
# 2. Object.values()
拿到对象所有的值,并返回一个数组
let arr = Object.values(man);
console.log(arr); //["john",19,17788889999]
2
# 3.Object.assign()
给一个对象添加属性和值,或者说合并两个对象
拷贝一个对象的值传递给另一个对象
第一个参数是接收的对象,第二个是被拷贝的对象
let o ={gender:"男"};
Object.assign(o,man);
console.log(o);//{gender:"男","name": "john","age": 19,"phone": 17788889999}
2
3
# 1.1.4 Array的内置实例方法
# 1. reduce()
处理数组累加的情况
reduce(function(上一次的值,当前值){},初始值)
回调函数的返回值会传递给下一次运行时的**”上一次的值“**这个参数
无初始值:
let arr =[1,4,7,8];
let total=arr.reduce((prev,current)=>prev+current);
console.log(total);//20
2
3
有初始值:
也就是说第一个回调执行的时候,prev不是空的,而是参数里的值
let arr =[1,4,7,8];
let total=arr.reduce((prev,current)=>prev+current,10);
console.log(total);//30
2
3
# 2. find()
遍历数组,返回数组中第一个满足条件的元素的值,否则返回undefined
语法: find(function(当前元素,当前索引,数组本身){}[ , thisArg])
,其中回调函数要返回一个布尔值
thisArg:执行回调值指定的this对象
let arr =[1,4,7,8,"blue"];
//Find
let blue=arr.find(item=>item==="blue")
console.log(blue);//blue
2
3
4
# 3. every()
遍历数组,如果所有元素都符合条件就返回true,否则就返回false
语法:every(function(当前元素,当前索引,数组本身){}[, thisArg])
every会遍历数组到结束,或遇到回调返回false。
let arr =[1,4,7,8];
let t=arr.every(item=>item>0)
console.log(t);//true
2
3
# 4. join()
没有回调函数,遍历数组,把所有数组元素被转换成字符串并连接到一个字符串中。
如果一个元素是
undefined
或null
,它将被转换为空字符串
语法:join([separator])
参数是可选值,用来分割每个元素。
let spec={size:"40*40",color:"蓝色"}
console.log(Object.values(spec).join("/"));// 40*40/蓝色
2
# 1.1.5 Array的内置静态方法
# 1.Array.from()
把伪数组转化为真数组
# 1.1.6 String 的实例方法
# 1. split()
分割字符串,把他们变成数组。
语法 : split(separator[, limit])
separator
描述每个分割应该发生在哪里,可以是 undefined
,一个字符串,或者一个有Symbol.split
方法的正则表达式
在已经有 limit
个元素时停止分割
你被你指定的第一个参数的字符串会消失
如果传undefined也就是不传,那它也不会给你分割(哪怕你写了第二个参数),给你返回一个数组,里面原原本本的放着这个字符串
let str ="sunday"
console.log(str.split("n"));//["su","day"]
2
# 2. substring()
方法返回该字符串从起始索引到结束索引(不包括)的部分
语法: substring(indexStart[, indexEnd])
let str ="sunday"
console.log(str.substring(3));//"day"
console.log(str.substring(0,3));//"sun"
2
3
# 3.startsWith()
用来判断当前字符串是否以一个给定的子字符串开头,返回true或false
语法 :startsWith(searchString[, position])
第一个参数是期望字符串,第二个是期望的起始位置。
区分大小写
const str1 = 'Sunday';
console.log(str1.startsWith('Sun'));
// true
console.log(str1.startsWith('Sun', 2));
// false
2
3
4
5
6
7
8
# 4. includes()
确定是否可以在一个字符串中找到另一个字符串
语法 :includes(searchString[, position])
第一个参数是期望字符串,第二个是期望的起始位置,默认为0。
const sentence = 'The quick brown fox jumps over the lazy dog.';
const word = 'fox';
console.log(`The word "${word}" ${sentence.includes(word) ? 'is' : 'is not'} in the sentence`)// "The word "fox" is in the sentence"
2
3
4
5