博客列表 >数组与对象的声明与访问、作用域与作用链、对象的简化方案、分支结构与对应的语法糖

数组与对象的声明与访问、作用域与作用链、对象的简化方案、分支结构与对应的语法糖

Jet的博客
Jet的博客原创
2023年02月17日 17:41:59277浏览

一、数组与对象的声明和访问

1、数组

  1. // ! 1、数组
  2. const arr = [1, 'admin', true]
  3. // 查看
  4. console.log(arr)
  5. console.table(arr)
  6. console.log(arr[0],arr[1],arr[2])
  7. // arr[数组坐标,从0开始]
  8. console.log(typeof arr)
  9. console.log(Array.isArray(arr))
  10. console.log(arr.length)


const arr = [数组成员,可以是任意类型]


2、对象

  1. // 将索引 语义化
  2. // 0->id, 1->name, 2->status
  3. // index(数值)->key(字符串)
  4. let user = {
  5. // 每个成员:属性
  6. id: 1,
  7. name: 'Jet',
  8. isMarried: true,
  9. 'my email': 'admin@php.cn',
  10. }
  11. console.log(
  12. user.id,
  13. user.name,
  14. user.isMarried,
  15. user['my email'],
  16. user['id'],
  17. )


// 属性名是非法标识符时,用数组索引方式访问
// user['索引']
// user['索引'] = user.索引


  1. user = {
  2. id: 5,
  3. uname: '朱老师',
  4. show: function() {
  5. return `id=${this.id},uname=${this.uname}`
  6. //this: 永远和当前对象绑定,this->user, user变它也变
  7. },
  8. say: () => `id=${this.id},uname=${this.uname}`,
  9. // 它的this,永远和它的上下文绑定(即执行环境或者父级作用域)
  10. }
  11. console.log(user.show())
  12. console.log('this:' + user.say())


3、数组、对象的应用场景

3.1、多维数组

  1. //每个成员依然是一个数组
  2. // arr = [[...],[...],[...]]
  3. let arr = [
  4. [1, '手机', 5000],
  5. [2, '电脑', 9000],
  6. [3, '鼠标', 1000],
  7. ]
  8. console.log(arr)
  9. // arr[1] 读取索引为1的数组
  10. console.log(arr[1])
  11. // arr[1][1] 读取索引1数组下索引1的数据
  12. console.log(arr[1][1])


3.2、对象数组

  1. // obj = [{...}, {...}, {...}]
  2. let obj = [
  3. { name: '张三', age: 20 },
  4. { name: '李四', age: 25 },
  5. { name: '王五', age: 22 },
  6. ]
  7. console.log(obj[2].name)
  8. console.log(obj[2]['age'])


3.3、类数组

  1. const user ={
  2. 0: 5,
  3. 1: 'admin',
  4. 2: 'admin@php.cn',
  5. length: 3,
  6. }
  7. // length 属性
  8. console.log(user[1], user.length,)
  9. // length 获取对象长度
  10. console.log(Object.keys(user).length)
  11. // 不是数组,是对象
  12. console.log(Array.isArray(user), typeof user)
  13. //类数组转换为真正数组
  14. arr1 = Array.from(user)
  15. console.log(arr1)
  16. console.log(Array.isArray(arr1) )


类数组本质上还是对象
key是从0开始递增
内部是数组结构,但是缺是批了一个对象的外衣


二、作用域与作用链

2.1、块作用域

  1. {
  2. var a = 100;
  3. let b = 200;
  4. console.log(`a=${a}`);
  5. console.log(`b=${b}`);
  6. }
  7. // var 不支持块作用域,会导致变量泄露
  8. console.log(a);
  9. // let 支撑块作用域
  10. //console.log(b);


2.2、函数作用域

  1. let site = 'php中文网'
  2. const hello = function () {
  3. let site = 'php.cn'
  4. console.log(site)
  5. }
  6. hello()
  1. // 函数内部也有一个变量 site
  2. // 内部声明的叫私有成员
  3. // 先从内部找,有这个变量就返回,没有就往外找



2.3、全局作用域

  1. // 所有块,函数外部的,都是全局的
  2. const uname = 'php中文网'
  3. {
  4. // 如果内部有同名函数,也能构成作用域链
  5. //let uname = 'php.cn'
  6. console.log(uname)
  7. }
  8. ;(function () {
  9. // 函数作用域同样构成作用域链
  10. const uname = 'php.cn'
  11. console.log(uname)
  12. })()


作用域:查询变量
作用域链:查询变量的路径(由内向外不可逆)


三、对象的简化方案

3.1、原始写法:

  1. let item = {
  2. name: '小米13',
  3. price: 5000,
  4. show: function () {
  5. return `${this.name}: ${this.price} 元`
  6. },
  7. }
  8. console.log(item.show())

全局变量

  1. let name = '小米14'
  2. let price = 6000
  3. item = {
  4. name: name,
  5. price: price,
  6. show: function () {
  7. return `${this.name}: ${this.price} 元`
  8. },
  9. }
  10. console.log(item.show())

3.2、属性简化

  1. item = {
  2. name,
  3. price,
  4. show: function () {
  5. return `${this.name}: ${this.price} 元`
  6. },
  7. }
  8. console.log(`属性简化:`+ item.show())


如果属性与变量同盟名,可只写属性不写变量


3.3、方法简化

  1. item = {
  2. name,
  3. price,
  4. // 删除 `:function`
  5. show(){
  6. return `${this.name}: ${this.price} 元`
  7. }
  8. }
  9. console.log(`方法简化:`+ item.show())


方法简化:【删除 :function】


四、分支结构与对应的语法糖

4.1、单分支

  1. let uname = false
  2. if (uname) {
  3. console.log('ok')
  4. }


如果为真(满足执行条件)就执行


4.2、双分支

  1. if(uname) {
  2. console.log('ok')
  3. }else {
  4. console.log('Error')
  5. }


当条件不满足执行这里时(或者条件为假),就执行else


4.3、多分支

  1. uname = 100
  2. if (uname === 120) {
  3. console.log('ok')
  4. }
  5. if (uname === 100) {
  6. console.log('Good')
  7. } else {
  8. console.log('Sorry, 404')
  9. }


按顺序执行,如若中途执行完成后就返回
如若执行过程中没有满足条件,直到最后执行else


4.4、双分支语法糖

  1. // 双分支语法糖 => 三元运算符
  2. let a = false;
  3. // 三元运算符公式: 条件 ? true : false
  4. console.log(`三元运算符:` + (a? 'ok' : 'Error'))
  5. console.log('------------------------')


4.5、多分支语法糖

  1. // 等值判断
  2. let b = 130
  3. switch (b) {
  4. case 100:
  5. console.log('b=100')
  6. break
  7. case 120:
  8. console.log('b=120')
  9. break
  10. default:
  11. console.log('数据越界')
  12. }


语法糖:没有改变语法本质,只是简化了书写

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议