一,对象
1.对象的数据类型 :复合数据类型,是容器(塑料袋)
2.对象的增删改查
-增
-创建对象 1.new Object() 2. 省略 new 3.对象字面量 直接写个 { } 4.写上属性{ 属性名:属性值,xxxx:xx}
要添加属性名,用点,要添加的是变量的值,用[ ]
-添加属性 对象.属性名 =属性值 或者 对象[变量名]=属性值
-删 delete 对象.属性名
-改 和添加属性一样,不过是赋新值
-查 直接对象.属性名 查询就好(注:对于对象中没有的属性,不会报错,而是undefined)
3.对象的属性
属性名:任意值,没要求,但是过于特殊不能直接用,要 [ ],建议标识符规范命名
可用symbol作为属性名
可以用点来添加属性,点后的名是什么,属性名就是什么 也可以用 [ ]来添加属性,括号中为变量时,添加的属性名为变量的值
属性值:可以任意数据类型,也可以是对象
4.in运算符
语法: 属性名 in 对象名 (属性名要加引号'')
检查 对象中是否有该属性,有返回 true ,没有false
5.对象字面量
直接用{ } 创建对象 ,在{ }也可以写属性名和属性值 ,之间用逗号隔开
6.枚举 for in
-获取对象中的所有属性
- for(let propName in 对象名){ 语句...}
propName是自定义的变量名,代表每一个的属性名
对象名[propName ] 代表属性值
- 不是所有属性都能枚举
例如 符号symobl添加的属性
7.修改变量和修改对象
参照原始值的可变 进行对比分析
可变理解为内存不变值可变,不可变可以理解为值变了内存就要变
对于不可变变量,每次更改都会创建一个新的变量,而原始变量保持不变.而对于可变对象,可以在对象内部修改数据,而不必创建新对象.
所以 对象前面加 const ,禁止变量被重新赋值,这样对象里面的值也能改变
8.方法
对象的属性为一个函数时,调用函数 就称为 调用对象的方法
二,函数
1.函数概念
函数是存储代码的对象
语法: function 函数名() {语句....}
调用函数:执行函数内的代码 函数名()
查看函数 直接写函数名
2.函数创建方式
1.函数声明
function 函数名() {语句...}
2.函数表达式
const 变量=funtion() {语句...}
3.箭头函数
( ) => {语句...}
3.函数参数
可以传递任何类型的值作为参数
参数分为
-形式参数 相当于在函数内声明了变量,但是没赋值
-实际参数 实参会赋值给形参
当实参=形参,将对应的实参赋值给实参
当实参>形参,多余实参不使用
当实参<形参,多余形参值为undefined
参数可以设置默认值
例 const fn2 = (a=10) =>{语句....} 没有实参传递时,a为10
4.箭头函数的参数
当箭头函数中形参只有一个时,可省掉括号()
例 const fn2 = (a) =>{语句....} 变成 const fn2 = a =>{语句....}
5.对象作为参数
当函数默认值为对象时,函数每次调用,就会创建新的对象(当函数执行完毕,会释放函数内部存储的所有变量的内存)
6.函数作为参数
函数能作为参数进行传递
7.函数的返回值 return
用return关键字来指定函数的返回值
返回值没有要求,默认值为undefined
return一致性,函数立即结束
8.箭头函数返回值
当代码一行时,箭头函数的返回值可直接写在箭头后 例 const sum=(a,b) => return a+b
写成 const sum=(a,b) =>a+b
9.作用域
作用域有全局作用域和局部作用域
-全局作用域
在网页运行时创建,网页关闭时销毁
可以在任意位置访问
-局部作用域
-块作用域: 在代码块执行时创建,执行完毕销毁
只能在块内部访问,外部无法访问
-函数作用域:在函数调用时产生,调用结束后销毁
每调用一次就会产生一个新的函数作用域
10.作用域链
作用域链:使用变量时,用作用域链找变量
就近原则,js解释器会在最近的作用域中寻找变量,没找到就逐层往上找,找到全局后依旧没有,就报错 xx没有定义(xx is no defined)
11.方法
对象的属性为一个函数时,这个函数就是对象的方法
12.window对象和var
window对象 | window是浏览器提供的一个对象,可直接访问 |
window对象的属性可以通过window对象访问,也可以直接访问(如document.write('xx') 等同于 window.document.write('xx')) | |
window对象代表的是浏览器窗口,通过该对象可以对浏览器进行各种操作 | |
函数可 认为是window对象的方法 window.function fn(){语句..} | |
var | var用于声明变量,作用和let相同,但是var不具有块作用域 |
在全局作用域中用var,会作为window对象的属性保存 window.b =20 等价于 var b =20 | |
使用function声明的函数,会作为window的方法保存 funciton fn(){语句..} 在调用时 fn() 等同于 window.fn() | |
使用let声明的变量,存储在一个秘密的小地方(无法访问),不会存储在window中 | |
在局部作用域中,没有使用var或let声明变量,变量会自动生成window对象的属性,变成全局变量 d= 10 等同于 window.d =10 变成这样 没有变量提升 |
13.变量提升
提升变量,能够给预留内存空间,减少内存分配的次数 | |
var的提升 | 有提示,能在声明前访问变量(相当于在前面写变量的声明) |
函数的提升 | 有提升,在函数调用前声明函数 |
let的提升 | 有提升.在赋值前解释器禁止对该变量访问 |
14.debugger 打端点
在控制台点击源代码,选择打端点位置,刷新即可
15.立即执行函数
只会调用一次的匿名函数,能够解决避免变量冲突的问题
语法: (function( ){语句..} ( ) ); 后面的()是调用函数的意思
有()或[]开头的代码,在后面写分号,不然识别成 (xxx)(xxx) 调用函数 函数名()
16.this
this的概念 函数在执行时,js解析器每次都会传递一个隐含的参数,this,this会指向一个对象,根据函数调用的方式不同而指向不同
this的指向 总结:谁调用指向谁
以函数形式(函数名( ) )调用,this指向window
以方法的形式(对象.方法名( ) ) 调用,this指向调用方法的对象
17.箭头函数
箭头函数没有自己的this,他的this由外层作用域决定
箭头函数的this和它的调用方式无关
因为它比较稳定,不用看它的调用方式,所以常用
18.对象书写
对象的属性名和属性值相同,可省略
const obj = { fn:fn,fn2:fn2}可改成 const obj = { fn,fn2}
19.严格模式
哪个作用域需要,写上 "use strict"
禁止一些语法,更易报错,提升性能
开发中,常用