对象与数组的基本语法形式

168 阅读5分钟

一、什么是对象

1.对象有两种语法形式

(1) 字面量语法 定义:直接将对象赋值给一个变量存储。 var 对象 = { 键名:键值,键名:键值,键名:键值 }; 例如:

const obj = {
        name:'张三',
        age:18,
        sex:'男',
    }
    console.log(obj);

(2) 内置构造函数 定义:内置构造函数就是系统已经内置好的函数,我们通过new来直接进行调用,输出的是一个空对象。 var 对象 = { 键名:键值, 键名:键值, 键名:键值 }; 例如:

    const obj = new Object();
    console.log(obj);

二、对象对于key键名的要求

键名可以为数字、@、#等各种特殊符号, ​ 如果是数字、@、#这三个特殊字符可以不用转化为字符串 ​ 如果是其他字符串,那么在增删查改的时候,需要转化为字符串,才可以不报错。 ​ 例如:

const obj = {
        name:'张三',
        age:18,
        sex:'男',
        '@':111,
        '#':222,
        123:333,
    }
    console.log(obj);
    console.log(obj['name']);
    console.log(obj['sex']);    

三、对象的操作(增删查改)

有两种语法形式:

1.点语法

2.中括号[ ]语法

1.点语法形式

const obj = {
    name:'张三',
    age:'18',
}
​
// 增
obj.sex = '男';
console.log(obj);
​
// 删
delete obj.sex;
console.log(obj);
​
//查
console.log(obj.name);
console.log(obj.sex);
​
// 改
obj.name = 'Jack';
console.log(obj);

2.中括号语法形式

const obj = {
    name:'张三',
    age:'18',
}
console.log(obj);
​
// 增
obj['sex'] = '女';
console.log(obj);
​
// 删
delete obj['sex'];
console.log(obj);
​
//查
console.log(obj['name']);
console.log(obj['sex']);
​
// 改
obj['name'] = 'Jack';
console.log(obj);

四、点语法和[]中括号语法的区别

  • 点语法 . 后面的是键名,[]括号里面的也是键名,键名命名正常的时候,两者都可以使用;

  • 对于特殊字符和数字,只能支持[]语法;

  • []支持变量,点语法不支持变量;

  • []语法可以解析变量,会使用变量中存储的数据,作为键名获取对应的数据。

    • []语法中写入的是键名,要加定界符;
    • []语法中写入的是变量,不要将定界符。
      const obj = {
                 name:'张三',
                 age:18,
                 sex:'男',
                 123:'111',
                 '@':222,
                 $:333,
             }
             console.log(obj);
     
             // 用点语法不可以直接输出数字   
             // console.log(obj.123);
            
            // 用点语法不可以直接输出特殊字符
             console.log(obj.$);
             console.log(obj.@);
     
             // 数字和特殊字符用[]方括号语法形式
             console.log(obj[123]);
     
             console.log(obj['@']);
             console.log(obj['$']);
     
            // 变量用方括号[]语法形式
             let i = 'name';
             console.log(obj.i); // 报错
             console.log(obj[i]);
    

    五、循环遍历对象

    1.遍历对象使用的是for...in

    语法形式:for( var 变量 in 对象 ){ }

    变量中存储的是变量的键名/键/属性,

    必须使用对象[ ]语法形式 也就是对象[ 变量 ]调用键名所对应的键值。

     const obj = {
                 name:'张三',
                 age:18,
                 sex:'男',
                 123:'111',
                 '@':222,
                 $:333,
             }
             console.log(obj);
             
     for( let key in obj ){
        console.log( key , obj[key] );
     }
    

    运行结果:

0519def907154269ba45c7bdb2265ee9_tplv-k3u1fbpfcp-watermark.png

* * *

**实际项目中,因为对象的形式一般都相对很复杂,所以不会循环遍历每一个对象,一般采用解构赋值的形式来操作对象。***

```
 // 解构赋值对象中的值
 const obj = {
             name:'张三',
             age:18,
             sex:'男',
             123:'111',
             '@':222,
             $:333,
         };
 let{ name , age , sex } = obj;
 console.log( name , age , sex );
```


> 注意:一般解构赋值不可以结构数字和特殊字符,会报错

六、认识数组

定义:数组就是存放数据的集合。

数组里面可以存放基本数据类型和引用数据类型。

基本数据类型:string、Boolean、float、null、undefined;

引用数据类型:function、array、object;

语法形式:

const arr = [ 数据1 , 数据2 , 数据3 , 数据4 ,...];

七、创建数组

创建数组有两种方式:

1.字面量

2.内置构造函数

1.字面量

语法形式:

const arr = [ 数据1 , 数据2 , 数据3 , 数据4 ,...];

const   arr   =   [  1002003002e3  , 100.123 , function(){}  ,[ 1 , 2 , 3 , 4 , 5 ] , ... ];

console.log( arr );

2.内置构造函数

语法形式:

const arr = new Array( );

// 空数组
const arr1 = new Array();
console.log(arr1);     

// 数组长度为10,是一个空数组
const arr1 = new Array(10);
console.log(arr2);

// 数组传入10和20的参数
const arr3 = new Array(10 , 20);
console.log(arr3);

// 创建多值的数组
const arr4 = new Array( 100 , 200 , 300 , 400 );
console.log(arr4);

八、数组的长度

语法形式:

数组.length;

const arr = [ 1,2,3,4,5,6,true,undefined,null,100.123];
console.log(arr.length);

console.log( arr[0] );
console.log( arr[1] );
console.log( arr[2] );
console.log( arr[3] );
console.log( arr[4] );
console.log( arr[5] );
console.log( arr[6] );
console.log( arr[7] );
console.log( arr[8] );
console.log( arr[9] );
console.log( arr[10] );

运行结果:

e7ef2e86d9504706a6d91ec0887d3034_tplv-k3u1fbpfcp-watermark.png

九、数组的索引下标

数组的索引下标用 index 表示,值用 item 表示(一般是这样)

值也可以用索引下标表示:数组[ index ]。

// for循环遍历数组
        for (let i = 0; i <= arr.length - 1; i++) {
            console.log(i, arr[i]);
        }


        console.log('');



        // 通过forEach循环遍历数组
        arr.forEach(function (item, index) {
            console.log(index, item);
        })


        console.log('');


        // 通过for...of来循环遍历数组
        // for...if是用来获取数组的值
        for (let value of arr) {
            console.log(value);
        }


        console.log('');


        // 通过for...in遍历循环数组中的索引下标
        for (let index in arr) {
            console.log(index);
        }

十、基本数据类型和引用数据类型的存储方式

基本数据类型:Boolean、number、null、undefined、float

引用数据类型:function、object、array、

(1)存储的区别:

1.基本数据类型:存储在栈内存中,变量内部就是存储的是变量的值

2.引用数据类型:变量存储在栈内存中,变量内部存储的指向堆内存的地址(对象实际的值),

(2)赋值的区别:

1.基本数据类型:是值的传递

可以理解为,将我自身的值复制一份给到另一个变量,后续修改另一个变量时,与自身没有任何关系

2.引用数据类型:是地址的传递

可以理解为,将自身的地址赋值一份给到另一个变量,后续修改相互会有影响

(3)比较的区别:

1.基本数据类型

比较时, 是拿变量实际的值,去做对比

2.引用数据类型

比较时,是拿引用地址做对比,判断是不是执行一个地址

(4) 传参的区别:

1.基本数据类型

是值的传递,将自身的值复制一份传递给函数的形参

2.引用数据类型

是地址的传递,将自身的地址复制一份传递给函数的形参