六 数据类型 (简短介绍) 下篇

发布于:2025-07-10 ⋅ 阅读:(17) ⋅ 点赞:(0)

现在说说对象数据类型

1. Arrays 数组

数组 是数据的有序集合 。

数组就像一个值序列或一个项目列表。它能够一次性存储多个值。数组中的各个值正式称为数组的 elements items

每个元素位于一个给定的位置,正式称为其在数组中的索引 。元素的总数称为数组的长度

😀字符串和数组都是数据序列。因此,索引和长度的概念对它们都适用。

数组元素可以是任何数据类型。它们可以是数字、字符串、布尔值——任何类型都可以。它们甚至可以是数组。我们将在 JavaScript 数组——基础知识一章中详细探讨这些情况。此外,数组元素的数据类型不一定要相同。例如,数组可以包含数字和字符串。

如何创建数组>

数组可以用方括号 ( [] ) 来 “字面地” 表示。数组的每个元素都放在方括号内,并使用逗号 ( , ) 与其他元素分隔。这种直接使用 [] 表示的数组称为数组字面量 。先介绍这一种。

var nums = [1, 5, 10];
// 访问超出范围的索引会导致 undefined :
nums[3] ->>> undefined
nums[-1] ->>> undefined

// 访问数组长度
nums.length ->>> 3;

2. Functions 功能

任何程序员都无法否认函数在编程中的重要性——它们扮演着不可或缺的角色。

函数 定义了一段在调用该函数时执行的代码 。

function 关键字用于在 JavaScript 中创建函数。

function functionName(parameterList) {
   statements
}

我们以 function 关键字开头,然后是函数的名称 functionName (回想一下, functionName 是一个占位符,您应该用实际文本填充)之后是一对括号( () ),括号内是函数的参数。最后是一对花括号( {} ),表示函数的主体 。函数主体由函数调用时执行的语句组成。总的来说,上面定义函数的代码称为函数的定义

要调用一个函数,我们只需将其名称写在括号 ( () ) 后面。这对括号的作用是调用并执行该函数。如果没有括号,我们就只是引用函数的定义。

在下面的代码中,我们创建一个名为 sayHello 的函数来向用户打招呼:

function sayHello() {
   var name = prompt('Enter your name:');
   document.write('Hello, ' + name + '.');
}

sayHello() 

这里的最后一条语句通过后面的括号调用了 sayHello ,即 sayHello () 。这实际上执行了 sayHello 内部定义的代码。

Quite simple, wasn't it?

😍

函数可以接收额外的数据来执行其任务。例如,一个用于将两个数字相加的函数,在调用时可能会接受这些数字作为附加数据。

这些额外的数据被称为参数(arguments ),有时也被称为 args 。 调用函数时,函数的参数放在括号( () )内。

函数内部每个参数的名称称为参数 。 定义函数时,参数放在括号 ( () ) 内。

形参是我们用来指代传递给函数的值的名称 ,而实参则是实际值 。

function sum(a, b) {
  console.log(a + b);
}

sum(10, 20);  ->>> 30
sum(10, -5);  ->>>  5
sum(10, 30.5); ->>> 40.5
sum(0, 0);     ->>> 0

通常在设置函数时,希望获得一个函数来返回计算结果,可以用到关键字 return,当调用函数时, return 关键字会返回一个值 。

我们将重新定义上面创建的 sum() 函数,使其简单地返回 ab 的总和,而不是记录它:

function sum(a, b) {
  return a + b;
}

JavaScript 中美丽而强大的函数世界远不止于此。o

3. Objects 对象

我们在 JavaScript 中编码的大部分时间都用于处理对象。对象是 JavaScript 的基石。JavaScript 本身就是一门面向对象编程 (OOP) 语言。

但是对象是什么?

对象是一组属性和方法。

属性定义对象的特征 ,而方法定义其行为动作

JavaScript 以及其他编程语言中的对象,其工作方式与现实世界中的对象基本相同。让我们借助一个现实世界的对象来理解这一点。

想想现实世界的物体

烤箱返场,以烤箱为例。它是日常生活中使用的物品,用于简单的烘焙,例如烘烤美味的磅蛋糕,甚至是一些美味的饼干。

嗯,它可以有型号、保修期、机身颜色、温度等级、尺寸、额定功率等等。这些都是烤箱的属性。

行为?动作?嗯,我们可以打开或关闭烤箱,加热顶部或底部的元件,打开风扇,设置定时器等等。这些就是烤箱的方法。

JavaScript 中有许多不同类型的对象。正如我们上面看到的,数组是对象。函数也是对象。在本文中,我们关注 JavaScript 中表示所有对象中最纯粹的实际对象数据类型。

{key1: value1, key2: value2, ..., keyN: valueN}

我们首先编写一对花括号 ( {} )。在这些括号内,我们将对象的各个键值对放入括号中,并使用逗号 ( , ) 分隔。在每个名称-值对中,属性名称放在最前面,并使用冒号 ( : ) 与值分隔。

var obj = {x: 10, y: 20};

“对象” 是一个通用术语,用于指代任何非原始值。普通对象是一个更具体的术语,指的是 JavaScript 中最简单的对象。

当我们想用一个名称存储多条信息时,普通对象非常方便。

var url = {
  protocol: 'https',  
  domain: 'www.aaaa.com',
  path: '/'
};

该对象有三个属性:

  1. protocol — 指定 URL 的协议,即通过 http 还是 https 提供服务。
  2. domain 指定 URL 的域名。
  3. path 指定域名后的路径。

我们可以使用以下两种方式之一访问对象的属性: 括号符号点符号 。在前一种即括号表示法中,我们将属性名称以字符串形式写在对象值后的一对括号 ( [] ) 中。在后一种表示法中,我们将属性名称写在对象值后的句点字符 ( . ) 之后。

url.protocol  ->>> 'https'

url['protocal'] ->>> 'https'

那如果我们要为现有对象添加新属性:

var url = {
  protocol: 'https',
  domain: 'www.aaaa.com',
  path: '/'
};

// add two new properties
url.queryString = null;
url['hash'] = null;

这里我们在使用给定的符号创建并存储在内存中之后向 url 添加两个属性。

除了这些简单的属性之外,对象还可以拥有方法。方法是属性的特例。

方法是对象的一个属性,其值是函数 。

创建方法没什么特别的。我们创建它们就像在对象上创建属性一样。毕竟, 方法也是属性 !两者之间的唯一区别在于,我们给方法赋值时,不是赋字符串、数字、布尔值或其他值,而是赋值一个函数。这使得属性可调用 ,从而成为一个方法。

让我们在上面创建的 url 对象上定义一个方法,我们称之为 getURL 。此方法将返回由 url 对象中给出的属性连接而成的完整 URL:

var url = {
  protocol: 'https',
  domain: 'www.aaaa.com',
  path: '/',

  // return the full URL, as a string
  getURL: function() {
    return url.protocol + '://' + url.domain + url.path;
  }
};

url.getURL(); ->>> 'https://www.aaaa.com/'
也可以用
url['getURL']() 这多不美观啊

typeof 运算符

到目前为止,我们仅创建了给定数据类型的变量,而没有发现任何以编程方式检索这些变量类型的方法。

typeof 运算符以字符串值的形式返回给定表达式的数据类型 。

typeof expression

typeof 10; // 'number'
typeof 3.142; // 'number'

typeof "Hello"; // 'string'
typeof 'Hello'; // 'string'

typeof true; // 'boolean'

typeof undefined; // 'undefined'

正如您在这里清楚看到的,对于所有前四种原始类型, typeof 返回的名称与 JavaScript 中的原始数据类型完全相同。

null 呢?
 

typeof null; 'object'  shit
null 怎么会是一个 'object' 呢?

好吧, typeofnull 值上返回 'object' 是 JavaScript 中的一个官方错误 ,是由其以前的实现引入的。

记住就完事了。

typeof [1, 2, 3]; // 'object'

对于数组对象, typeof 仅返回 'object' ;而不是人们所期望的值 "array"

数组怎么会成为 'object'

我们知道,数组属于 JavaScript 数据类型的对象类别,即它们通过引用存储而不是通过其实际值存储。

每当给定的表达式是对内存中某些数据的引用时,JavaScript 就会返回 'object' 从而简化 typeof 的工作。

数组实际上是对内存中有序数据的引用,并且当通过 typeof 运算符检查时,同样会转换为 'object'

唯一的例外是函数数据类型,其中 typeof 返回 "function" 。我们将在下面看到更多细节。

typeof function() {}; // "function"
函数怎么不是 'object'

typeof 用于检查函数时返回 'function' 的原因描述如下:

与任何其他引用类型相比,检查函数值相当容易——只需要在给定值上搜索内部属性 [[Call]] ,如果它存在,我们就知道我们正在处理一个函数。

或者说整个想法是函数是 JavaScript 中特殊类型的对象 - 它们是可调用对象。由于与所有其他对象存在这种区别,因此对它们进行稍微不同的处理是很有意义的——与所有其他对象不同! 就是要不一样

  1. 对于除 null 之外的每个原语(概念忘记了,就想 10), typeof 返回一个包含其类型名称的字符串。
  2. 对于每个对象(函数除外), typeof 返回 'object'
  3. 对于 nulltypeof 返回 'object'
  4. 对于函数, typeof 返回 'function'

完事。


网站公告

今日签到

点亮在社区的每一天
去签到