JavaScript(四)

本文深入探讨JavaScript中的对象概念,包括本地对象、内置对象和宿主对象的区别,以及对象的创建方式。同时,详细讲解了JavaScript数据类型,如基本数据类型、引用类型及其特性,数组类型的特点和操作方法,以及Date和RegExp类型的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.08 JavaScript对象简介

JavaScript数据类型

基本数据类型 引用类型

在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,这有点类似于传统面向对象语言中的“类”,但ECMAScript只是一种基于对象的语言,它不具备传统的面向对象语言所支持的类和接口等基本结构,因此,在ECMAScript中,引用类型被称为“对象定义”,它描述一类对象所具有的属性和方法。而引用类型的值则称为“对象”,它是引用类型的一个实例。

  • ECMAScript中的对象有三种:

    ☞ 本地对象:

     ECMA-262 把本地对象定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。
    简单来说,本地对象就是 ECMA-262 定义的引用类型。它们包括:Object、Function、
    Array、String、Boolean、Number、Date、RegExp。
    

    ☞ 内置对象:

     ECMA-262 把内置对象定义为“由 ECMAScript 实现提供的、独立于宿主环境的
    所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例
    化内置对象,它已被实例化了。ECMA-262 只定义了两个内置对象,即 Global 和 
    Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。
    

    ☞ 宿主对象:

     所有非本地对象都是宿主对象,即由 ECMAScript 实现的宿主环境提供的对象。
    如 BOM 和 DOM 对象都是宿主对象。
    
  • 创建本地对象:

    JavaScript中,创建对象有以下几种常用的方式:

    ☞ 使用new操作符后跟一个构造函数来创建

 如  var obj=new Object();
        var d=new Date();

☞ 使用对象字面量表示法

如  var person={
            name:“张三”,
            age:25,
            height:“78KG”} 

使用函数来构造对象

实例代码:

 function person(name,age,height){
		      this.name=name;
		      this.age=age;
			  this.height=height;
		   }
		   var person3=new person("王五",28,"68kg"); 

建议多使用对象字面量法,因为这种语法要求的代码量少,而且能给人封装数据的感觉。实际上,对象字面量也是向函数传递大量可选参数的首选方式。

实例代码:

function displayInfo(args){
   var output=””;
   if(typeof args.name ==”string”){
   output+ = “Name:”+args.name+”\n”;
}
if(typeof args.age ==”number”){
  output+=”Age:”+args.age+”\n”;
}
 console.log(output);
}
displayInfo({name:'abc',age:29})
displayInfo({name:'def'});

 在这个例子中,函数displayInfo()接受一个名为args的参数。这个参数可能带有一
个名为name或age的属性,也可能这两个属性都有或者都没有。

这种传递参数的模式最适合需要向函数传入大量可选参数的情形。一般来讲,命名参数虽然容易处理,但在有多个可选参数的情况下就会显得不够灵活。最好的做法是对那些必需值使用命名参数,而使用对象字面量来封装多个可选参数。

一般来说,访问对象属性时使用的都是点表示法,这也是很多面向对象语言中通用的语法。不过,在javascript也可以使用方括号表示法来访问对象的属性。在使用方括号时,应该将要访问的属性以字符串的形式放在方括号中。
例如:person[‘name’] person.name

从功能上看,这两种访问对象属性的方法没有任何区别。但方括号的主要优点是可以通过变量来访问属性,
例如:var propertyName =‘def’;
console.log(person[propertyName]);

如果属性名中包含会导致语法错误的字符,或者属性名使用的关键字或保留字,也可以使用方括号表示法。
例如:person[“first name”]=‘abc’;
由于 “first name”中包含一个空格,所以不能使用点表示法来访问它。

然而,属性名中是可以包含非字母非数字的,这时候就可以使用方括号表示法来访问它们。通常,除非必须使用变量来访问属性,建议使用点表示法。

访问对象属性:

如 var arr=new Array();
      alert(arr.length);

调用对象方法:

 如  var d1=new Date();
        alert(d1.getFullYear());

1.09 Object类型

-Object类型用来创建一个通用的对象,它是ECMAScript中使用最多的一个类型,虽然Object的实例不具备多少功能,但对于在应用程序中存储和传输数据来说,它是非常理想的选择。
-ECMAScript中的所有对象都由这个对象继承而来,Object 对象中的所有属性和方法都会出现在其他对象中 。

Object类型的使用:

格式:

var obj=new Object([value]);

 obj—必选项,代表要赋值为Object对象的变量名。
 vaule—可选项,可以是任意一种 JavaScript的基本数据类型。(Number、Boolean、
或 String。)如果 value 为一个对象,返回不作改动的该对象。如果value 为 
null、undefined,或者没有给出,则产生没有内容的对象。 

Object对象的属性和方法:
在这里插入图片描述
1.20 Array类型

Array类型也是ECMAScript中最常用的类型之一,ECMAScript中的数组与其他语言中的数组有着相当大的区别:

☞ ECMAScript中的数组的每一项可以保存任何类型的数据。

☞ ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新
增数据。

数组的创建:

☞ 使用Array()构造函数创建

如  var arr1=new Array();
        var arr2=new Array(10);
        var arr3=new Array(“张三”);
        var arr4=Array(3);

使用字面量形式创建:

如  var colors=["red","blue","green"]; 
		var name=[]; 

访问数组元素:
使用方括号加索引值得形式。

如   colors[0]
          colors[2]

数组的length属性:

ECMAScript中,数组的length属性不是只读的,通过改变这个属性,可以从数组的末尾移除数组元素或向数组中添加新项。

如  var colors=["red","blue","green"];
          colors.length=2;      //移除末尾项green
          colors[colors.length]=black;   //新增一项
          colors.lenght=5;   //新增两个空项 

检测数组:

要判断某个对象是否为数组,ECMAScript 3使用instanceof操作符检测。在ECMAScript 5中则新增了一个Array.isArray()方法来判断。

  • 数字对象的常用属性和方法
    在这里插入图片描述
    在这里插入图片描述
    迭代方法:

    (es5新增)每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象-影响this的值。传入这些方法中的函数会接收三个参数:数组项的值,该项在数组中的位置和数组对象本身。根据使用的方法不同,这个函数执行后的返回值可能会也可能不会影响方法的返回值。

    • every():
      对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true.
      下例检测数组中的所有元素是否都大于 10。
function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
  • filter():
    对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
    返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加;
    新数组只包含返回true的值,索引缺失的不包括,原数组保持不变。
var data = [1,2,3,4,5];
console.log(data.filter(function(e){
  return e%2==0;
}));
console.log(data);
  • forEach()
    对数组中的每一项给定函数。这个方法没有返回值

    从头到尾遍历数组,为每个元素调用指定函数
    第一个参数:传递的函数
    该函数调用的参数:数组元素、元素索引、数组本身

var data =[1,2,3,4,5];
var sum =0;
data.forEach(function(value){
sum+=value;
});
console.log(“sum:”+sum);
data.forEach(function(a,i,v){
a [i]=v+1;
});
console.log(“加1后的值:”+data);
  • map()

    对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
    调用数组的每个元素传递给指定的函数,并返回一个包含返回值的新数组;
    传递给map()的函数有返回值,map()返回新数组,不会修改调用的数组;

a =[1,2,3];
b = a.map(function(x){return x*x});
console.log(a);
  • some()

    对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true.以上方法都不会修改数组中的包含值。

var a = new Array(1,2,3,4,5,6);
console.log(a.some(function(e){
return e>3;}));
console.log(a.every(function(e){
return e>3}));
every每一项都为true才为true,some只要有一项为true就为true。
every(function(item,index,array){});
some(function(item,index,array){});

归并方法:

 ECMAScript5还新增了两个归并数组的方法:reduce()和reduceRight().这两个方
法都会迭代数组的所有项,然后构建一个最终返回的值。其中reduce()方法从数组的第
一项开始,逐个遍历到最后。而reduceRight()则从数组的最后一项开始,向前遍历到
第一项。
 
 这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初
始值。传给reduce()和reduceRight()的函数接收4个参数:前一个值、当前值、项的
索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭
代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二
项。

1.21 Data类型

Date对象提供了与日期、时间相关的操作功能。ECMAScript中的Date类型是在早期java中的java.util.Date类基础上构建的,它使用来自UTC(国际协调时间)1970年1月1日零时开始经过的毫秒数来保存日期。在使用这种数据存储格式的条件下,Date类型保存的日期能够精确到1970年1月1日之前或之后285616年。

创建日期对象:

var d1=new Date();
var d2=new Date(“May 25,2008”);

Data对象的常用属性和方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.22 RegExp类型

RegExp对象表示正则表达式,它是字符串执行模式匹配的强大工具。ECMAScript正则表达式使用类似Perl的语法。

创建正则表达式
格式:

var expression=/pattern/flags; 或 var expression=new RegExp(pattern,flags);

参数说明:

pattern:字符串,指定正则表达式的模式或其他正则表达式

flags:可选参数  i-忽略大小写  g-全局匹配  m-多行模式

i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串
的大小写

g:表示全局(glob)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时
立即停止

m:表示多行模式(multiline)即在到达一行文本末尾时还会继续查找下一行中是否存在
与模式匹配的项。  

测试正则表达式:

如  var re1=new RegExp("abc","i");
		  var re2=/abc/i;

test()方法:

如  alert(re1.test("abc1234edefg"));
	alert(re2.test("ABCA1234edefg"));

RegExp对象的常用属性和方法:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值