龙空技术网

带你入门JS的世界,树立正确的价“值”观(二)

前端达人 438

前言:

如今看官们对“js数字逗号”可能比较着重,我们都想要分析一些“js数字逗号”的相关内容。那么小编在网摘上网罗了一些关于“js数字逗号””的相关文章,希望兄弟们能喜欢,朋友们快快来了解一下吧!

通过本文,我们将树立正确的JS价“值”观。

转载说明:原创不易,未经授权,谢绝任何形式的转载

什么是值?这很难说

这就像问数学中的数字是什么,或者几何中的点是什么。“值”是JavaScript 世界中的一个东西。

数字是值——但其他一些东西也是,比如对象和函数。然而,很多东西,例如if语句或变量声明,都不是值。

“值”不在代码中

为了更好地区分值与 JavaScript 程序中的其他内容,可以用小王子的那幅画来类比。

把自己想象成站在一颗小行星上,这个小行星就是程序的代码。从表面上看,我们可以看到 if 语句、变量声明、逗号、大括号等等 JavaScript 代码中的元素。这些元素说明了我们要进行函数调用、多次执行某些操作,甚至会引发错误等等。

我的代码包含诸如“进行函数调用”或“多次执行此操作”甚至“引发错误”之类的说明。我一步一步地完成这些说明——从我的小行星上跑腿。

但是,有时我们会抬头仰望 JavaScript 的天空,看到了不同的值:布尔值、数字、字符串、符号、函数、对象,还有 null 和 undefined。这些值可能会在我们的代码中被引用,但它们实际上是在我们的代码之外,独立地存在于 JavaScript 宇宙的空间中。

在我的 JavaScript 世界中,各种值在宇宙的空间中漂浮。

或许你会说:“等等,我一直以为这些值就在我的代码里啊!”这时,我要求你进行一次信仰的飞跃,因为这个心智模型需要一些时间来适应。请给它五分钟的时间。

如何理解?

在 JavaScript 代码中,我们经常使用布尔值、数字、字符串、函数、对象、null 和 undefined 等不同类型的值,但是这些值并不存在于代码本身中。相反,它们被认为是“漂浮”在 JavaScript 宇宙中的不同实体,我们可以从代码中引用它们,但它们本身不是代码的一部分。

有些人可能会困惑地认为这些值就在代码中,但实际上这是一种心理上的错觉。为了理解这种概念,可能需要一些时间来适应这种心智模型,所以建议花一些时间去理解和接受它。

回到“价值观”这个话题。从广义上讲,它们有两种类型。

Primitive Values (原始值)

Primitive Values,大部中文教程都翻译成基础值,我觉得称作原始值更为贴切,所谓原始值是数字和字符串等。打开浏览器的控制台并使用 console.log() 打印这些原始值:

console.log(2);console.log("hello");console.log(undefined);

所有的原始值都有一些共同的特点。我无法在我的代码中对它们进行任何会影响它们的操作。这可能有点抽象,所以我们会在后面的章节中详细讨论这个问题。现在,你可以把原始值看作是星星——遥远而寒冷,但在需要时它们总是可用的。

这是本文的第一个价“值”观。

Objects and Functions(对象和函数)

对象和函数也是值,但它们不同于原始值。原始值包括数字和字符串等。您可以打开浏览器的控制台并使用console.log()方法打印这些原始值:

console.log(2);console.log("hello");console.log(undefined);

所有原始值都有一些共同点。在我的代码中,我无法对它们进行任何会影响它们的操作。这听起来可能有点含糊不清,因此我们将在下一个模块中详细探讨这意味着什么。现在,您可以把原始值想象成像星星一样——冰冷而遥远,但在我需要它们的时候总是在那里。

但对象和函数是特殊的,因为我可以从我的代码中操作它们。例如,我可以将它们连接到其他值。在浏览器控制台中,您可以使用console.log()方法打印对象和函数:

console.log({});console.log([]);console.log(x => x * 2);

请注意,浏览器控制台以与原始值不同的方式显示它们。一些浏览器可能会在它们前面显示一个箭头,或者在您单击它们时执行一些特殊操作。如果您安装了几种不同的浏览器(例如 Chrome 和 Firefox),请比较它们如何可视化对象和函数。

谷歌控制台输出

火狐控制台输出

对象和函数很特殊,因为我可以在我的代码中操作它们。例如,我可以将它们与其他值连接起来。这个概念可能有点模糊,因此我们将在后面的模块中详细介绍。现在,您可以将对象和函数想象成漂浮在我的代码附近的岩石。它们离得足够近,以至于我可以操纵它们。

这是本文的第二个价值观。

您可能有疑问。好的。如果您提出问题,JavaScript 的世界可能会回答它!当然,前提是您知道如何提问。

Expressions(表达式)

如果你面临是否向你最好的朋友坦白你的真实感受,需要花很长时间,直到你们都老去甚至不在人世的都很难告知,那么 JavaScript 无法提供任何实际的帮助。这是因为这个问题涉及到复杂的人类情感和行为问题,而计算机编程语言并没有足够的理解和智能来回答这些问题。因此,虽然 JavaScript 能回答很多问题,但对于这种涉及到人类感情和行为的问题,它是无能为力的。

但是有一些问题 JavaScript 会非常乐意回答。这些问题有一个特殊的名称——它们被称为表达式。

如果我们“询问”表达式 2 + 2,JavaScript 将用值 4 “回答”。

console.log(2 + 2); // 4

表达式可以看作是一个代码片段,用于表达一个值。如果我们使用console.log()函数打印一个表达式,它会输出表达式的值。

如果“表达式”这个词让你感到困惑,把它看作是表达一个值的代码片段。你可能听别人说过 2 + 2 “等于”或“评估为”4。这些都是说同一件事的不同方式。

我们向 JavaScript 询问 2 + 2,它回答 4。表达式总是产生一个单一的值。现在我们已经了解了足够的关于表达式的知识,可以开始动手实践了!

我之前说过,JavaScript 有许多类型的值:数字、字符串、对象等等。我们如何知道任何特定值的类型呢?

这听起来像一个问题。我们敢问吗?

检查类型

起初,JavaScript 宇宙中的所有值可能看起来都一样——天空中的星星都长一个样。但如果仔细观察,您会发现只有不到十种不同的值。JavaScript 中的值可能看起来都一样,但实际上它们可以分为几种不同的类型,每种类型都有其独特的表现方式。

要检查一个值的类型,我们可以使用 typeof 运算符。JavaScript 将返回一个预先确定的字符串值,如“number”、“string”或“object”。

以下是您可以在浏览器控制台中尝试的几个示例:

console.log(typeof(2)); // "number"console.log(typeof("hello")); // "string"console.log(typeof(undefined)); // "undefined"

在这里,typeof(2) 是一个表达式——它的结果值是“number”。

严格来说,typeof 不需要使用括号。例如,typeof 2 与 typeof(2) 一样有效。但是,有时需要避免歧义。如果我们在 typeof 之后省略括号,下面其中的一个案例就会中断。试着猜猜它是哪一个:

console.log(typeof({})); // "object"console.log(typeof([])); // "object"console.log(typeof(x => x * 2)); // "function"

您可以在浏览器控制台中验证您的猜测。

现在再看看最后三个例子——这次要密切关注它们的结果。您是否发现这些结果中的任何一个都会让你吃惊?为什么?

值的类型

作为一名有抱负的天文学家,您可能想了解在 JavaScript 天空中可以观察到的每种值的类型。经过将近 25 年的 JavaScript 研究,科学家们只发现了九种这样的类型:

Primitive Values(原始值)Undefined(未定义),用于无意中缺失的值。Null(空),用于有意中缺失的值。布尔值(true 和 false),用于逻辑运算。数值(-100,3.14 和其他),用于数学计算。字符串("hello","abracadabra" 和其他),用于文本。Symbols(不常用),用于隐藏实现细节。BigInt(不常用且新),用于处理大数值的数学运算。

延伸阅读:什么是用于无意中缺失的值?

"Undefined"(未定义)通常表示一个变量或属性未被赋值或定义,因此它的值为"undefined"。当我们意图赋值或定义一个变量或属性,但由于某种原因(例如拼写错误、语法错误、程序逻辑错误等)导致其未被赋值或定义时,我们称之为“无意中缺失的值”。

延伸阅读:什么是用于有意中缺失的值

"Null"(空)表示有意设置一个变量或属性的值为空,也就是没有值。这通常是在程序逻辑上有意为之的情况下使用的。

例如,如果我们创建了一个尚未初始化的对象,我们可能会在某个时刻需要将其属性值设置为"Null",以表示该属性在此时确实没有值。或者,如果我们需要将一个已有值的变量或属性清空,我们可以将其设置为"Null"。

因此,与“Undefined”(未定义)表示无意中缺失的值不同,"Null"表示有意中缺失的值,是程序员有意为之的结果。在代码中使用"Null"可以帮助我们清楚地表示一个变量或属性在某些情况下没有值。

对象和函数

8.对象({} 和其他),用于分组相关数据和代码。

9.函数(x => x * 2 和其他),用于引用代码。

没有其他类型

你可能会问:“但是我使用的其他类型呢,比如数组呢?” 在JavaScript中,除了我们刚刚枚举的那些基本值类型之外,没有其他基本值类型。其余的都是对象!例如,即使是数组、日期和正则表达式,在JavaScript中本质上也是对象:

console.log(typeof([])); // "object"console.log(typeof(new Date())); // "object"console.log(typeof(/(hello|goodbye)/)); // "object"

“我明白了,”你可能会回答,“这是因为一切都是对象!”然而,这是一个流行的谣言,但事实并非如此。虽然像"hi".toUpperCase()这样的代码让"hi"看起来像一个对象,但这只是一种幻觉。JavaScript在执行这个操作时会创建一个包装对象,然后立即丢弃它。 如果这个机制还没有完全理解,也没关系。现在,你只需要记住原始值,比如数字和字符串,不是对象即可。

价“值”观总结

让我们来回顾一下我们到目前为止所学的内容:

值和其他东西。值可以看作是在 JavaScript 宇宙中不同的东西,它们并不是实际存在于我们的代码中的对象,但我们可以从我们的代码中引用它们。值是 JavaScript 中最基本的东西,而其他东西则可以将不同的值组合在一起,包括对象和函数。因此,我们可以使用值来执行各种操作,例如计算、比较和连接字符串,同时使用其他东西来组织和管理这些值。有两类值:原始值和对象与函数。总共有九种不同的类型。每种类型都有特定的用途,但有些很少用到。有些值是孤独的。例如,null是Null类型的唯一值,undefined是Undefined类型的唯一值。正如我们将在后面学到的那样,这两个孤独的值会带来很多麻烦!我们可以使用表达式来提出问题。JavaScript会用值来回答我们。例如,2 + 2表达式的答案是4。我们可以通过将其包装在typeof表达式中来检查某个东西的类型。例如,typeof(4)是字符串值"number"。

今天的分享就到这里,希望对你有所帮助,感谢你的阅读,文章创作不易,如果你喜欢我的分享,别忘了点赞转发,让更多的人看到,最后别忘记关注「前端达人」,你的支持将是我分享最大的动力,后续我会持续输出更多内容,敬请期待。

推荐阅读

带你入门JS的世界,首先需要建立正确的心智模型(一)

标签: #js数字逗号