js基础知识篇(1)补充-数组与对象以及js内置对象

 

目录

1、数组

1.1 什么是数组?

1.2 创建数组

1.3 获取数组中的元素

1.4 遍历数组

1.5 数组中新增元素

1.6 数组案例

2.对象

2.1 什么是对象?

2.2 创建对象的三种方式

 2.3 访问对象属性

2.4 其他

2.5 Array Math Date对象

2.6 js宿主对象



1、数组

1.1 什么是数组?

字符串、数值和布尔值都属于离散值。如果某个变量是离散的,它在任何时刻就只能有一个值。如果想用一个变量来存储一组值,就要使用数组。  ----《JavaScript+Dom编程艺术》

数组是由名字相同的多个值构成的的集合,集合中的每个数据被称作这个数组的元素,在数组中可以存放任意类型的元素。

js中数组是基于对象的,不会有数组越界的问题,当访问溢出时,不会报错,值是undefined;当写操作溢出时,也不报错,可以溢出写。

用代码解释:

  var arr=[1,2,3]
  console.log(arr[3]);//长度为3的数组中,第四位的值为undefined
  arr[4]="一个这个数组中还没有的值";//给一个长度为3的数组的第五位赋值
  console.log(arr)//此时数组长度变为5  [1, 2, 3, empty, "一个这个数组中还没有的值"]

1.2 创建数组

JS 中创建数组有两种方式(一般都使用数组字面量方式)

(1) 利用  new 创建数组  

  var 数组名 = new Array() ;
  var arr = new Array();   // 创建一个新的空数组
  var arr2=new Array();
        arr2[0]=1;
        arr2[1]=2;
        arr2[2]=3
  //注意:当new Array括号里只传一个参数时,此时这个参数是数组的长度,不是数组元素的值,所以只能是整数
        var arr3=new Array(10);
        console.log(arr3)// [empty × 10] 长度为10的空数组
        var arr3=new Array(10.2);// 表示数组长度,不能为小数,Uncaught RangeError: Invalid array length

(2)利用数组字面量创建数组

//1. 使用数组字面量方式创建空的数组
var  数组名 = [];
//2. 使用数组字面量方式创建带初始值的数组
var  数组名 = ['佩奇','小黑',['莫蒂','瑞奇'],function fn(){alert("123")},true];
//注意: 数组的字面量是方括号 [ ] 
//声明数组并赋值称为数组的初始化 
//这种字面量方式也是我们以后最多使用的方式  

例如:

var arrStus = ['小白',12,true,28.9];

 

new Array方法的具体步骤如下: 

 

首先声明数组:在js中,数组要用关键字Array来声明,在声明数组时还可以指定数组长度如:

var stars=Array(4);//定义一个长度为4的数组stars

填充数组:向数组中添加元素的操作,包括给出新元素和指定新元素的位置,位置通过下标给出,例如stars[0]=Jolin;方括号中的0就是下标,这条语句意思是为stars数组的第一位添加一个"Jolin "元素。

数组中可以存放数值、字符串、布尔值、函数或者一个变量、另一个数组的元素甚至还可以存放其他的数组。

注意:数组里的函数调用是通过下标+()方式

存放另一个数组的话,我们要访问里面的数组就要使用“数组名[][]”这种形式。如下面的例子

    var dance=new Array("Jolin","Jack")
    var actor=new Array("杨紫",24,true,"邓伦","张一山","靳东");
    var stars=new Array(3);
    stars[0]=true; //可以是boolean
    stars[1]=dance[0];//数组元素的值可以是另外一个数组的元素
    stars[2]=actor; //数组元素可以是另一个数组

    // 访问stars数组的第三个元素(存的是数组)的第一个元素
    console.log(stars[2][0]); //结果是输出“杨紫”

关联数组:通过元素名字引用数组元素而不是下标,提高可读性 

 // 关联数组:
    var person=new Array();
    person["name"]="Danny";
    person["sex"]="male";
    person["age"]=18;
    console.log(person["name"]);//相当于原来的 console.log(person[0])

 

1.3 获取数组中的元素

数组可以通过索引来访问、设置、修改对应的数组元素,我们可以通过“数组名[索引]”的形式来获取数组中的元素。

数组的索引------索引 (下标) :用来访问数组元素的序号(数组下标从 0 开始)注意:索引号从0开始,数组长度是元素个数    

// 定义数组
var arrStus = ['fan',20,'02175052'];
// 获取数组中的第3个元素
alert(arrStus[2]); //网页弹出02175052  

1.4 遍历数组

(1)数组元素遍历: 就是把数组中的每个元素从头到尾都访问一次,可以使用循环实现数组的遍历。

基本格式为:

var arr = ['red','green','skyblue','purple','gold','yellowgreen', 'blue'];
for(var i = 0; i < arr.length; i++){
    console.log(arr[i]);
}

 (2)获取数组长度

使用“数组名.length”可以访问数组元素的数量(数组长度)

var arr = ['red','green','skyblue','purple','gold','yellowgreen', 'blue'];
console.log(arr.length);//输出数组长度是7

当数组里面的元素个数发生了变化,这个 length 属性跟着一起变化。这个特点在之后数组筛选,反转等算法中会经常使用

1.5 数组中新增元素

js数组的length属性并不是只读的,还可以修改。

(1)通过修改 length 长度新增数组元素

 可以通过修改 length 长度来实现数组扩容的目的 ,length 属性是可读写的。

var arr = ['red', 'green', 'blue', 'pink'];
arr.length = 7;//将数组长度变为7
console.log(arr);
console.log(arr[4]);//声明变量未给值,默认值就是 undefined。
console.log(arr[5]);//声明变量未给值,默认值就是 undefined。
console.log(arr[6]);//声明变量未给值,默认值就是 undefined。

(2)通过修改数组索引新增数组元素(这是我们最常用的一种方式,建议使用)

可以通过修改数组索引的方式追加数组元素。

var arr = ['red', 'green', 'blue', 'pink'];
arr[4] = 'skyblue';
console.log(arr);// ["red", "green", "blue", "pink", "skyblue"]

但是不能直接给数组名赋值,否则会覆盖掉以前的数据,例如:

var arr = ['red', 'green', 'blue', 'pink'];
arr= 'purple';
console.log(arr);//只输出["purple"]

1.6 数组案例

(1)筛选数组

要求:将数组[2, 0, 6, 1, 77, 0, 52, 0, 25, 7]中的 0 去掉后,形成一个不包含 0 的新数组。

  1. 需要一个新数组用于存放筛选之后的数据。
  2. 遍历原来的数组,把不是 0 的数据添加到新数组里面( 此时要注意采用数组名+索引的格式接收数据)。
  3. 新数组里面的个数,用 length 不断累加。
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];   // 空数组的默认的长度为 0 
// 定义一个变量 i 用来计算新数组的索引号
for (var i = 0; i < arr.length; i++) {
    // 找出大于 10 的数
    if (arr[i] != 0) {
        // 给新数组
        // 每次存入一个值,newArr长度都会 +1  
        newArr[newArr.length] = arr[i];
    }
}
console.log(newArr);

要求:将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中大于等于 10 的元素选出来,放入新数组。

var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
    if (arr[i] >= 10) {
        // 给新数组
        newArr[newArr.length] = arr[i];
    }
}
console.log(newArr);

 

(2)翻转数组

要求: 将数组 ['red','green','skyblue','purple','gold','yellowgreen', 'blue'] 的内容反过来存放,并输出。

可以通过reverse()方法或者使用for循环倒序输出。

var arr = ['red','green','skyblue','purple','gold','yellowgreen', 'blue'];
//使用reverse方法
arr.reverse();
console.log(arr);
//使用for循环
for(i=arr.length-1;i>=0;i--){
	console.log(arr[i]);
}

结果如下:

(3)数组排序

冒泡排序:是一种算法,把一系列的数据按照一定的顺序进行排列显示(从小到大或从大到小)。

要求:使用冒泡排序将数组[27,32,16,0,19,34,2,7]按照从小到大顺序排列并输出。

   var arr = [27,32,16,0,19,34,2,7];
        for (var i = 0; i < arr.length - 1; i++) {
            for (var j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    var temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
  console.log(arr);//[0, 2, 7, 16, 19, 27, 32, 34]

(4)数组去重

 //知识点:indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。
 var arr=[1,3,1,1,2,4,4,8];
        function Unique(){
            for(i=0;i<arr.length;i++){
                var result=[];
               for(var i=0;i<arr.length;i++){
                   if(result.indexOf(arr[i])==-1){
                       result.push(arr[i]);
                   }
               }
               return result;
            }

        }
        console.log(Unique(arr));//[1, 3, 2, 4, 8]

 

2.对象

2.1 什么是对象?

在 JavaScript 中,对象是一种非常重要的数据类型,它是一组无序的相关属性和方法的集合,是一组数据或功能的集合。所有的事物都是对象,例如字符串、数值、数组、函数等。 对象是由属性和方法组成的。 使用对象可以使我们的表达结构更清晰,内容更丰富。

属性:事物的特征,隶属于某个对象的变量

方法:事物的行为,只有某个特定对象才能调用的方法

属性/变量  方法/函数的区别:

对象的属性普通变量
对象的方法函数
婚后婚前

变量:单独声明并赋值,使用时直接用变量名,单独存在

属性:在对象里面的,不需要声明,使用时用   对象名.属性名

函数:单独声明并且调用;

方法:在对象里面,调用时用  对象名.方法名

 

对象与对象相似arrays,除了对象不是通过索引来访问和修改其数据,而是通过所谓的访问对象中的数据properties

对象对于以结构化方式存储数据很有用,并且可以表示现实世界中的对象,例如猫。

这是一个示例猫对象:

var cat = {
  "name": "Whiskers",
  "legs": 4,
  "tails": 1,
  "enemies": ["Water", "Dogs"]
};

 

2.2 创建对象的三种方式

(1)利用字面量创建对象

var student = {
   name : 'Lily',
   age : 18,
   sex : '女',
   study: function(){
        alert("学习javascript真有趣!");
    }
};

对象的调用:

console.log(student.name)     //对象里面的属性调用-----对象.属性名      
console.log(student['name'])  //对象里面的属性调用-----对象['属性名']   
student.study();              //对象里面的方法调用------对象.方法名

(2)利用new Object创建对象(跟前面的  new Array()  原理一致)

格式:对象.属性 = 值;  

var student = new Object();
student.name = 'pink'; //格式:对象.属性 = 值;   
student.age = 18;
student.sex = '男';
student.study = function(){
    alert("学习javascript真有趣!");
}

(3)利用构造函数创建对象

构造函数 :是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起使用。可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。 在 js 中,使用构造函数要时要注意以下几点:

  1.  构造函数约定首字母大写。
  2.  函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
  3.  构造函数中不需要 return 返回结果。
  4.  当我们创建对象的时候,必须用 new 来调用构造函数。
function Person(name, age, sex) { 
     this.name = name;
     this.age = age;
     this.sex = sex;
     this.study = function() {
     alert('我的名字叫:' + this.name + ',年龄:' + this.age + ',性别:' + this.sex);
    }
}
var Danny = new Person('Danny', 18, '男');//通过 new 关键字创建对象的过程我们也称为对象实例化
var Jenny = new Person('Jenny', 16, '女');
console.log(Danny.name);
console.log(Jenny.name);

练习:利用构造函数创建两个英雄对象。函数中的公共部分包括:姓名属性(name),类型属性(type),血量属性(blood)和攻击方式(attack)。 英雄对象的信息如下 :    廉颇   坦克    500血量    攻击 :近战  后羿   射手    100血量    攻击: 远程

                                                                 

 

function hero(name, type, blood) {
     this.name = name;
     this.type = type;
     this.blood = blood;
     this.play= function(play) {
           console.log(play);
    }
}
var lianpo = new hero('廉颇', '坦克',500);
var houyi= new hero('后裔', '射手',100);
lianpo.play("近战");
houyi.play("远战");

执行结果:

 2.3 访问对象属性

对象的操作方法

JS 对象运算符

  • In 判断左侧运算数是否为右侧运算数的成员;
  • Instancesof 判断对相爱呢个实例是否属于某个类或构造函数
  • New 根据构造函数创建一个新的对象,并初始化该对象
  • Delete 删除指定对象的属性,数组元素或变量

    可以删除对象里的属性
    • console.log(myObj); // 输出对象{name: "aaaa"}
    • delete myObj.age;
    • var myObj = {name: 'aaaa', age: 21};
  • . 及 [] 存取对象和数组元素

  • () 函数调用,改变运算运算符优先级等;

下面是分享的《Javascript高级程序设计》的内容,讲的很明白。

下面是自己的总结: 

有两种访问对象属性的方式:点表示法(.)和方括号表示法([]),类似于数组。当提前知道要访问的属性的名称时,便使用点

符号。一般建议使用"."表示法。

以下是使用点符号(.)读取对象属性的示例:

var myObj = {
  prop1: "val1",
  prop2: "val2"
};
var prop1val = myObj.prop1; // val1
var prop2val = myObj.prop2; // val2

 访问对象属性的第二种方法是括号表示法([])。如果要访问的对象的属性名称中有空格,则需要使用方括号表示法。

但是,我们仍然可以在不带空格的对象属性上使用方括号表示法。

以下是使用括号表示法读取对象属性的示例:

var myObj = {
  "Space Name": "Kirk",
  "More Space": "Spock",
  "NoSpace": "USS Enterprise"
};
myObj["Space Name"]; // Kirk
myObj['More Space']; // Spock
myObj["NoSpace"];    // USS Enterprise

在对象上使用括号表示法的另一种用法是访问存储为变量值的属性。这对于迭代对象的属性或访问查找非常有用。

这是使用变量访问属性的示例:

var dogs = {
  Fido: "Mutt",  Hunter: "Doberman",  Snoopie: "Beagle"
};
var myDog = "Hunter";
var myBreed = dogs[myDog];
console.log(myBreed); // "Doberman"

更新、修改、删除对象属性 

创建JavaScript对象后,可以随时更新其属性,就像更新任何其他变量一样。可以使用点或括号表示法进行更新。

可以通过修改现有属性的方式向现有JavaScript对象添加新属性。这是我们将"bark"属性添加到的方法ourDogourDog.bark = "bow-wow";同样可以使用点或括号表示法进行更新。

可以通过delete 对象.属性名,或者delete 对象[" 属性名"]方式删除对象属性。例如:delete ourDog.bark;

对象其他属性

  • constructor:保存用于创建当前对象的函数,构造函数就是Object()
  • HasOwnProperty(propertyName) 检测给定输定在当前对象实例中是否存在(而不是实例的原型中)
  • isPrototypeOf(object) :检测传入的对象是否是另一个对象的原型(而不是在实例中);
  • propertyIsEnumerable(propertyName);检测给定属性是否能用for-in语句每句来枚举;
  • toLocaleString() 返回对象的字符串表示,该字符串与执行环境的地区对应;
  • toString() 返回对象的字符串表示
  • valueOf() 返回对象的字符串,数值或布尔值表示;通常与toString()的值相同;

在ECMAScript中,Object是所有对象的基础,因此所有对象都具有这些基本的属性和方法。

 

2.4 其他

 (1)new关键字 

 new 在执行时会做四件事情

  1.  在内存中创建一个新的空对象。
  2. 让 this 指向这个新的对象。
  3. 执行构造函数里面的代码,给这个新对象添加属性和方法。
  4. 返回这个新对象(所以构造函数里面不需要return)。 

(2)遍历对象属性 

for...in 语句用于对数组或者对象的属性进行循环操作。例如遍历上面Lianpo对象的属性。

for (i in Lianpo) {
	console.log(i);
    console.log(Lianpo[i]);
}

2.5 Array Math Date对象

js内建对象可以简单、快速的帮我们完成很多任务。这里介绍3个,注意首字母大写:Array Math Date

(1)数组

  var dance=new Array();

(2)Math

  • Math.round() 四舍五入 

注意:正数时,包含5是向上取整,负数时包含5是向下取整。

  • Math.abs() 获取绝对值
  • Math.ceil() and Math.floor() 向上取整和向下取整
  • Math.random() 取[0,1)的随机小数 
  • Math.max() and Max.min() 获取一组数据中的最大值和最小值
  • Math.PI 获取圆周率π 的值

例子

console.log(Math.max(10,1,9,100,200,45,78));
console.log(Math.min(10,1,9,100,200,45,78));
return Math.floor(Math.random() * 10);//使用Math函数生成1-9之间随机数

(3)Date

没有参数时,默认输出当前时间。

 var now=new Date();
 console.log(now); //输出当前时间

参数常见的写法,数字型2020,07,09,20,20

有5个数字时,分别指定年、月、日、小时和分钟;

有4个数字时,分别指定年、月、日和小时;

3 个数字指定年、月和日;2个数字指定年份和月份;

具体可以看MDN文档的介绍。

字符串型2020-07-19 

JavaScript 从 0 到 11 计算月份。一月是 0。十二月是11。

var now=new Date(2020,01,09);
//数字型返回下一月Sun Feb 09 2020 00:00:00 GMT+0800 (中国标准时间)
var now=new Date("2020-01-09");
//字符串型返回当前月Thu Jan 09 2020 08:00:00 GMT+0800 (中国标准时间)

2.6 js宿主对象

由Web浏览器预定义的对象成为宿主对象,可以通过这些对象获取关于网页上表单元素的信息。主要有Form、Image、Element等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值