1.JavaScript组成:
1.ECMAScript(核心js)
2.DOM(文档对象模型 js操作html的api)
3.BOM(浏览器对象模型 js操作浏览器的api)
2.JavaScript运行的环境
1.node
2.浏览器
3.JavaScript特点:
1.解释型语言
2.弱类型语言
3.按照代码解析顺序从上至下执行
console.log(a);
var a=10;
var a;
console.log(a);
a=10;
4.区分大小写
4.注释 // /**/
5.标识符命名规则
1.由字母数字下划线以及$组成
2.不能由数字开头
3.使用驼峰式命名 firstName lastName
4.不能使用关键字或者保留字
6.变量
var let const
1.var声明的变量可以重复声明
2.var声明的变量可以变量提升
3.var声明的变量不存在块级作用域
7.数据类型(9种数据类型)
1.基本数据类型/简单数据类型:string number boolean null undefiend symbol
2.引用数据类型/复杂数据类型:object Array function
8.深拷贝(值传递)/浅拷贝(引用传递)
1.值得复制拷贝--深拷贝
var a=1;
b=a;
a=2;
2.引用地址得传递
var obj={
name:"zhangsan"
}
obj1=obj;//指针 引用地址 1001
如何实现深拷贝?*****
9.undefined与null的关系
undefiend派生自null
10.==和===区别?****
1.==比较得是值 类型不一致转换为同一类型再比较
console.log(1=='1');//true
2.===比较得是数据类型 类型不一致 直接返回false
console.log(1==='1');//false
console.log(NaN===NaN);//false
11.类型判断********
typeof返回值:undefiend number string boolean object(null {} []) function symbol
12.NaN isNaN isFinite Infinity
NaN hello%2
isNaN 判断是不是不是一个数
不是一个数 返回true
是一个数 返回false
isFinite 判断有效值
9/0 Infinity
-9/0 Infinity
对象
1.单个对象的创建
字面量 var obj={}
构造函数 var obj=new Object();//{}
2.对象的访问
点访问 obj.name
中括号访问 obj['age']
3.遍历对象
for(let key in obj){
key--键 属性名
obj[key]--值 属性值
}
var str='hjagsjfkahk';
for(let key of obj){
}
4.删除对象属性
delete obj.name
5.显示类型转换
Boolean()
String()
Number()
6.检测属性
1.in (检测某属性是否是某对象的自有属性或者是继承属性)
'name' in obj 'valueOf' in obj
2.hasOwnProperty(检测属性是否是自有属性 继承属性返回false)
obj.hasOwnProperty('valueOf');//false
3.propertyIsEnumerable(检测属性是否是可枚举属性 可枚举属性返回true)
obj={
name:"zhangsan",
age:12
}
7.原型 *****
原型:每一个构造函数都有一个原型对象,原型对象都有一个指针(constructor)指向构造函数
实例有一个指针(__proto__)指向原型对象
静态方法:只能由构造函数本身去调用
Object.defineproperty()
实例/原型方法:存在原型对象中得方法 valueOf() toString() constructor
隐式转换
1.基本数据类型
number + 'string'
number + number
2.引用数据类型
object valueOf() toString()
//相加 转换规则
// 1.默认调用的是toString() [object Object] string
// 2.如果内部重新写了toString()调用toString()
// 3.如果内部重写了valueOf()调用valueOf()
// 4.如果内部重新写了toString()和valueOf() 调用valueOf();
显式转换
1.将其他数据类型转换为String
1.toString()
2.+ "" + ''
3.String()
2.将其他数据类型转换为number
1.Number()
2.parseInt();12.1
3.parseFloat();
4.+
3.将其他数据类型转换为Boolean
1.Boolean()
2.!!a
深入理解对象属性
数据属性 访问器属性区别?
数据属性:相当于给当前对象定义了一个公共属性,访问修改直接返回value值;
访问器属性:可以控制访问或修改这个属性的具体行为;
数据属性:
1. Configurable 表示是否可删除
2.Enumerable 表示是否可枚举
3.Writable 表示是否可修改
4.Value 属性的属性
要修改/定义一个属性特性,必须使用defineProperty(目标对象,目标属性,{配置数据属性})
要修改/定义多个属性特性,使用defineProperties(目标对象,{配置多个属性})
获取对象的所有自身属性的描述符
获取一个:
getOwnPropertyDescriptor(目标对象,目标属性)
获取所有:
getOwnPropertyDescriptors(目标对象)
访问器属性:
1.Configurable 是否可删除 默认false
2.Enumerable 是否可枚举 默认false
3.Get 读取属性调用的函数
4.Set 设置属性调用的函数
var book={
_year:2022
}
Object.defineProperty(book,'year',{
get(){
return this._year
},
set(newYear){
if(newYear<=2022){
this._year=newYear
}
}
})
console.log(book.year);
book.year=2021;
console.log(book.year);
2.对象序列化和反序列化
JSON.stringify();将对象转化为json字符串
{
"name":"zhangsan",
"age":12
}
JSON.parse();将json字符串转化为对象