此片文章只介绍基础,不涉及高深知识!
对象(object)
let a = new Object()
a.name = "nam"
console.log(a)
let a = {
name:"my",
age:"18"
}
第一种方法:new Object():创建一个新的对象,a是对象的名称,name是属性,name后面是属性的值。
第二种方法:是字面量的方法创建对象,a是对象的名称,name是属性,name后面是属性的值。
对象属性的操作
Configurable | 设置属性是否可以删除并重新定义 |
---|---|
Enumberable | 设置属性是否可以for-in循环 |
Writable | 设置属性的值是否可以被修改 |
Value | 读取和写入数据 |
let a ={};
Object.defineProperty(a,"name",{
writable:false,
value:"my"
});
console.log(a.name)
a.name = "m"
console.log(a.name)//不可以被修改 writable:false
Object.defineProperty(a,"name",{
configurable:false,
value:"my"
});
console.log(a.name)
delete a.name;
console.log(a.name)//无法删除configurable:false
对象解构
可以在一条语句中嵌套数据实现多个赋值
let person = {
name:"my"
}
//不使用解构语法
let a = person.name
console.log(a)
//使用解构
let {name:a} = person
console.log(a)
创建对象的工厂模式和构造函数模式
-
工厂模式
function a (name,age,sex){
let w = new Object()
w.name = name,
w.age = age,
w.sex = sex
w.sayname = function (){
console.log(this.name)
};
return w
}
let per1 = a("q","v","w")
let per2 = a("qq","vq","wq")
console.log(per1)
console.log(per2)
function里面是一个容器,外面传值是往里面加东西
-
构造函数模式
function a (name,age,sex){
this.name = name,
this.age = age,
this.sex = sex;
this.sayname = function(){
console.log(this.name)
}
}
let per = new a("a","a","a")
per.sayname()
console.log(per)
工厂模式 | 构造函数模式 |
---|---|
显式的创建对象 | 没有显式的创建对象 |
属性和方法都指向w | 属性和方法都指向this |
有返回值 | 没有返回值 |
类
类声明 | 类表达式 |
---|---|
class person{} | const adnim = class {} |
console.log(a);//报错,无法访问
class a{}
console.log(a)//class ca{}
console.log(a);//a is not defined
var c = class a {}
console.log(a)//class a {}
类的函数声明不可以提升
数组
- 创建数组
let a =[1,2]
console.log(a);
console.log(typeof(a))
- 检查是否为数组
a= [1];
console.log(Array.isArray(a))//true
c= 1;
console.log(Array.isArray(c))//false
- 数组每一项
let e = [12,1];
e.length =1
console.log(e)//{12}
length :数组的个数,每一项。
-
数组归并方法
数组归并方法:reduce() 和 reduceright(),这两个函数接收4个参数:归并值(合起来的值),当前值(要加上去的值),当前项的索引,数组本身
var a = [1,2,3,4,5]
let c = a.reduce((prew,cur,index,array)=>prew + cur)
alert(c)//15
// reduce从前往后累加,函数的返回值都会成为下一次调用的参数: return first + second:返回值
let v = a.reduceRight(function(prew,cur,index,array){
console.log(prew+"和"+cur)
return prew + cur
})
alert(c)
//reduceRight"从后往前
-
数组迭代方法
方法 | 有啥用 |
---|---|
every | 对数组的每一项都传入函数,全部都是true,则返回true,否则false |
filter | 筛选合适的数据 |
forEach | 对每一个数组都会操作一次 |
map | 对数组的每一项都传入函数,最后返回执行函数之后的数组 |
some | 一次为true,都为true |
const iteration = [1,2,3];
let a = iteration.every((a,b,c)=>
a>2
)
// alert(a)//false
//every:对数组的每一项都传入函数,全部都是true,则返回true,否则false
let b = iteration.filter((a,b,c)=>
a>2
)
// alert(b)//3,4
//filter:筛选合适的数据
iteration.forEach(()=>{
// console.log(iteration)//打印了三次
})
//forEach:对每一个数组都会操作一次
iteration.map((value,index,arr)=>{
value *2
console.log(iteration)
})
let value = iteration.map((item,index,array)=>
item * 2
)
console.log(value)//2,4,6
iteration.some((value,index,array)=>{
console.log(value >2)//最后的结果true
})
//some:一次为true,都为true
-
数组添加,删除,排序
方法 | 有啥用 |
---|---|
push | 在数组末尾添加数据 |
pop | 删除数据最后一个数据,返回数组的最后一项 |
shift | 删除数据的第一项,并返回删除的数据 |
reverse | 反向排序 |
sort | 正常排序 |
concat | 连接数组 |
splice | 可以删除,添加,替换数据 |
push | 在数组末尾添加数据 |
var a = [1,2,3,5,6,9,0]
a.push(3)
console.log(a)//[1, 2, 3, 5, 6, 9, 0, 3]
b= a.pop()
console.log(b)//3
var a = [1,2,3,5,6,9,0]
a.shift()
console.log(a)//[2, 3, 5, 6, 9, 0]
var a = [1,2,3,5,6,9,0]
var c = [45,46]
console.log(a.reverse())//[0, 9, 6, 5, 3, 2, 1]
console.log(a.sort())//[0, 1, 2, 3, 5, 6, 9]
console.log(a.concat([12,22]))//[0, 1, 2, 3, 5, 6, 9, 12, 22]
console.log(a.concat(c))//[0, 1, 2, 3, 5, 6, 9, 45, 46]
console.log(a.splice(0,2))//[0, 1]
a.splice(1,0, "red")
console.log(a)//[2, 'red', 3, 5, 6, 9]
- 搜索数组
方法 | 啥用 |
---|---|
indexOf:(需要查找的数据,查找的开始位置索引) | 从前往后搜数据,返回索引 |
lastIndexOf:(需要查找的数据,查找的开始位置索引) | 从后往前搜数据,返回找到的第一个数据的索引 |
let a = [1,2,3,4,5]
console.log(a.indexOf(2))//1
console.log(a.lastIndexOf(5))//4
const b = [2,3,4,3,3]
console.log(b.lastIndexOf(3))//4
console.log(b.indexOf(3,1))//1
console.log(b.indexOf(3,2))//3