• 01快速入门-02-数组和对象


    1、数组

    1.1 基本认识

    定义数组可以使用关键词 new 来创建数组对象:
    var mycars=new Array(); 
    var mycars=new Array("Saab","Volvo","BMW");

    也可以直接赋值的方式(如下),另外,Java中的数组在固定了长度以后就不可以改变,但是在JS中的数组长度是可以改变的,直接给Array的length赋值就会导致数组大小的变化:
    var arr = [1,2 ,3];
    arr.length; //3
    arr.length = 6;
    arr; // [1, 2, 3, undefined, undefined, undefined]
    arr.length = 2;
    arr; // [1, 2]

    和Java数组类似的是,JS中的Array也是通过索引访问元素,并且可以赋新值,但是更灵活的是,如果通过索引给Array赋值,索引超出了范围,同样会引起Array大小的变化,这和Java中会报越界异常是不同的。

    Array的多维数组和Java类似,元素中又是另外的Array则可形成多维数组,取值也是通过类似 arr[1][2] //取数组中索引1元素(数组)的索引2的元素。

    JS中的数组类型的变量可以直接使用各种方法,Java中的数组是需要另外一个叫做Arrays的类提供静态方法来操作。

    1.2 常用方法

    Array的常用方法:
    • indexOf()
      • 搜索一个指定元素的位置,没找到返回 -1  // arr.indexOf('30'); 返回字符串'30'的索引

    • slice()
      • 截取部分Array元素返回新的Array //arr.slice(0, 3); 返回从索引开始(包含)到索引3(不包含)结束的元素新数组
      • 如果不传递参数,会从头到尾截取所有元素,我们可以利用这一点进行数组的 “复制”

    • push()
      • 在Array末尾添加若干新元素 //arr.push('A', 'B');

    • pop()
      • 在Array最后一个元素删除 //arr.pop();

    • unshift()
      • 在Array头部添加若干元素 //arr.unshift('A', 'B');

    • shift()
      • 把Array第一个元素删掉 //arr.shift();

    • sort()
      • 对Array排序,直接调用,按默认顺序排序 // var arr = ['B', 'C', 'A']; arr.sort(); arr -- > ['A', 'B', 'C']

    • reverse()
      • 把整个Array元素调转方向

    • splice(start, amount, valA, valB ...)
      • 修改Array的万能方法,可以从指定索引(start)开始删除若干(amount)元素,然后再从该位置添加若干元素(valA、valB...)
      • e.g. 从索引2开始删除3个元素,然后再添加两个元素 --> arr.splice(2, 3, 'Google', 'Facebook');
      • e.g. 从索引2开始不删除元素,添加两个元素 --> arr.splice(2, 0, 'Google', 'Facebook');

    • concat()
      • 连接两个Array,返回新的数组(注意,不会改变原数组,而是返回新数组) // arr.concat([1, 2, 3]);

    • join()
      • 把当前Array的每个元素用指定字符连起来,然后返回连接后的字符串
      • e.g. var arr = ['A', 'B', 1, 2]; arr.join('-'); // 'A-B-1-2'

    发散思维:
    在新生欢迎会上,你已经拿到了新同学的名单,请排序后显示:欢迎XXX,XXX,XXX和XXX同学!
    'use strict';
    var arr = ['小明', '小红', '大军', '阿黄'];
    let arrCopy = arr.slice().sort()
    const last = arrCopy.pop()
    const notLast = arrCopy.join(',')
    alert(`欢迎${notLast}和${last}同学!`);

    2、对象

    JS中的对象是一种无序的集合数据类型,由键值对组成,是不是很熟悉?没错,根本就和Java中的Map一个样。
    var xiaoming = {
        name: '小明',
        birth: 1990,
        school: 'No.1 Middle School',
        height: 1.70,
        weight: 65,
        score: null
    };

    属性的取值可以直接通过“点”来获取,如 xiaoming.name; //小明。这种方式要求变量名必须有效,如果包含特殊字符,需要用单引号括起来,访问也只能使用 [ ' attrName ' ] 来访问。以上两种方式是等同的, xiaoming.name; // --> xiaoming['name'];

    实际上,JS对象的所有属性都是字符串,即key都是字符串,但是value可以是任意数据类型(简直就是Map嘛)

    访问不存在的属性也不会报错,而是返回 undefined 

    JS对象是动态类型,意味着你可以自由地添加或删除属性,如 xiaoming.age = 18; //新增age属性且为18
    另,如果要删除属性,使用 delete objName.attrName 的方式就可以了,如 delete xiaoming.age;  //xiaoming.age --> undefined

    检测对象是否有某属性,使用 in 操作符,如 'name' in xiaoming; // true 。 不过要注意,in判断这个属性并不一定是你所认为的这个对象的,它完全可能是因为继承得到的,如果判断是对象自身的而不是继承得到的?使用 hasOwnProperty()  // xiaoming.hasOwnProperty('name'); --> true

    画外音:如何输出对象中所有属性?
    var xm = {
      name: '小明',
      birth: 2000,
      school: 'No.1 Middle School',
      height: 1.70,
      weight: 65,
      score: null
    };
    
    for(var i in xm){
      console.log(xm[i]);
    }


  • 相关阅读:
    JS中的“&&”与“&”和“||”“|”有什么区别?
    深入理解CSS过度动画transition
    使用navigator.userAgent查看浏览器当前模式和版本
    node.js面试题
    Javascript 中的 ...(展开运算符)
    JavaScript立即执行函数
    JavaScript实现继承的6种方式
    JavaScript的排序算法--冒泡、选择、直接插入
    JavaScript RegExp 对象
    (CVPR 2020 Oral)最新Scene Graph Generation开源框架
  • 原文地址:https://www.cnblogs.com/deng-cc/p/6596626.html
Copyright © 2020-2023  润新知