龙空技术网

为什么JavaScript数组从0开始,从1开始不行吗

Owen大前端时代 238

前言:

今天你们对“c语言字符数组赋值为0”都比较珍视,你们都需要学习一些“c语言字符数组赋值为0”的相关内容。那么小编同时在网摘上搜集了一些有关“c语言字符数组赋值为0””的相关资讯,希望咱们能喜欢,你们快快来了解一下吧!

在你刚接触 JavaScript 数组的时候,有没有好奇过为什么数组索引要从 0 开始,而不是按照我们生活中习惯的从 1 开始呢?

一些好奇心强的小伙伴应该查过这个问题,常见的答案是:

1.历史原因

2.节省计算资源

但是具体是什么历史原因导致的呢?如果是为了节省计算资源,后来计算机性能强大了,现代编程语言的数组为什么还是选择从 0 开始呢?

这世界上就是有很多喜欢寻根究底的人,有一个程序员 Mike Hoye 就调研了一下“历史原因”。

1.探究真正的历史原因

一切要从 C 语言开始说起,很多语言都能追溯到 C语言。C语言的地位可以参考下图:

JavaScript 毫不例外也参考了 C语言的基本语法,包括数组下标从0开始。C语言数组索引从 0 开始是借鉴了一种叫做 BCPL 的语言,BCPL 采用从0开始的方案完全是为了节省宝贵的计算资源。

1970年的IBM大型机

BCPL 语言诞生于 1967年,当时计算机非常非常少,甚至美国一个城市只有一台计算机。因此计算机是所有人一起共用的,每个人都有自己的时间配额。如果你的时间配额用完了,而你的代码还没有执行完,计算机会直接清除当前执行的程序,不会返回任何结果。

因此必须要写出高性能的程序,否则你辛苦写的程序在有限的时间配额里根本执行不完。因此此时程序员们不得不想出各种办法节省计算机资源,提升程序性能。

这就是“历史原因”,不仅数组下标从0开始和它有关,还有使用2位数字表示年份,Linux 命令大多是2个字符等等。

那么数组采用从 0 开始能够提高性能吗?

2.数组索引从 0 和 1 开始的区别

数组在内存中格式连续存储的,CPU需要根据索引找到对应数据存储的位置。如果数组索引从 1 开始,第二个元素的索引就是 2,距第一个元素偏移 1。此时计算机获取他的位置就是:1 + (2 - 1)

以此类推,第 i 个元素的位置就是:1 + (i - 1)

可以发现,如果数组的索引从 1 开始,程序获取元素在内存中的位置就需要先进行一次减法运算。在当时计算资源非常紧张的情况下,这种方案被精打细算的程序员Pass掉了。

如果数组从 0 开始情况就不一样了,元素的索引就是它距首个元素的距离,程序能够少进行一步计算。

3.为什么一些现代语言依旧选择数组从0开始

有一些语言继续采用数组下标从0开始是完全继承了其他语言的语法,比如诞生于1995年的JavaScript。还有一些语言比如Python,采用数组从0开始是因为这样写法更简洁。

比如 Python 在表示子数组或子字符串时,可以这样写:a[0:n]。表示 a 中前 n 个元素组成的新数组。如果我们使用1开始的数组写法,那么就要写成 a[1:n+1]。

4.总结

数组索引之所以选择从 0 开始,最开始是因为当时计算机性能有限。为了充分利用计算机资源,缩短程序运行时间。后来产生的现代语言,一些是继承了早期语言的语法,有些是因为数组从 0 开始写法更简洁。

欢迎大家点赞、评论、转发~

标签: #c语言字符数组赋值为0 #数组下标从什么开始c语言