diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/glossary/primitive | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/zh-cn/glossary/primitive')
-rw-r--r-- | files/zh-cn/glossary/primitive/index.html | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/files/zh-cn/glossary/primitive/index.html b/files/zh-cn/glossary/primitive/index.html new file mode 100644 index 0000000000..66db39c9b5 --- /dev/null +++ b/files/zh-cn/glossary/primitive/index.html @@ -0,0 +1,123 @@ +--- +title: 原始数据 +slug: Glossary/Primitive +tags: + - Glossary + - JavaScript + - 基本数据类型 + - 基本类型 + - 词汇 +translation_of: Glossary/Primitive +--- +<p><strong>基本类型</strong>(基本数值、基本数据类型)是一种既非{{Glossary("object", "对象")}}也无{{glossary("method","方法")}}的数据。在 {{Glossary("JavaScript")}} 中,共有7种基本类型:{{Glossary("string")}},{{Glossary("number")}},{{Glossary("bigint")}},{{Glossary("boolean")}},{{Glossary("null")}},{{Glossary("undefined")}},{{Glossary("symbol")}} ({{Glossary("ECMAScript")}} 2016新增)。</p> + +<p>多数情况下,基本类型直接代表了最底层的语言实现。</p> + +<p>所有基本类型的值都是<strong>不可改变</strong>的。但需要注意的是,基本类型本身和一个赋值为基本类型的变量的区别。变量会被赋予一个新值,而原值不能像数组、对象以及函数那样被改变。</p> + +<h2 id="示例1">示例1</h2> + +<p>这个示例会帮助你了解基本类型<strong>不可改变</strong>的事实。</p> + +<h3 id="JavaScript">JavaScript</h3> + +<pre><code>// 使用字符串方法不会改变一个字符串 +var bar = "baz"; +console.log(bar); // baz +bar.toUpperCase(); +console.log(bar); // baz + +// 使用数组方法可以改变一个数组 +var foo = []; +console.log(foo); // [] +foo.push("plugh"); +console.log(foo); // ["plugh"] + +// 赋值行为可以给基本类型一个新值,而不是改变它 +bar = bar.toUpperCase(); // BAZ</code></pre> + +<p>基本类型值可以被替换,但不能被改变。</p> + +<h2 id="示例2">示例2</h2> + +<p>下面的示例将让你体会到JavaScript是如何处理基本类型的。</p> + +<h3 id="JavaScript_2">JavaScript</h3> + +<pre><code>// 基本类型 +let foo = 5; + +// 定义一个貌似可以改变基本类型值的函数 +function addTwo(num) { + num += 2; +} +// 和前面的函数一样 +function addTwo_v2(foo) { + foo += 2; +} + +// 调用第一个函数,并传入基本类型值作为参数 +addTwo(foo); +// Getting the current Primitive value +console.log(foo); // 5 + +// 尝试调用第二个函数... +addTwo_v2(foo); +console.log(foo); // 5</code></pre> + +<p>你是否认为会得到<code>7</code>,而不是<code>5</code>?如果是,请看看代码是如何运行的:</p> + +<ul> + <li><code>addTwo</code>和<code>addTwo_v2</code>函数调用时,JavaScript会检查标识符<code>foo</code>的值,从而准确无误的找到第一行实例化变量的声明语句。</li> + <li>找到以后,JavaScript将其作为参数传递给函数的形参。</li> + <li>在执行函数体内语句之前,<strong>JavaScript会将传递进来的参数(基本类型的值)复制一份</strong>,创建一个本地副本。这个副本只存在于该函数的作用域中,我们能够通过指定在函数中的标识符访问到它(<code>addTwo</code>中的<code>num</code>,<code>addTwo_v2</code>中的<code>foo</code>)。</li> + <li>接下来,函数体中的语句开始执行: + <ul> + <li>第一个函数中,创建了本地<code>num</code>参数,<code>num</code>的值加2,但这个值并不是原来的<code>foo</code>的值。</li> + <li>第二个函数中,创建了本地参数<code>foo</code>,并将它的值加2,这个值不是外部foo的值。在这种情况下,外部的<code>foo</code>变量不能以<strong>任何</strong>方式被访问到。这是因为JavaScript的词法作用域(lexical scoping)所导致的变量覆盖,本地的变量<code>foo</code>覆盖了外部的变量<code>foo</code>。欲知详情,请参阅<a href="/zh-CN/docs/Web/JavaScript/Closures">闭包</a>。</li> + </ul> + </li> + <li>综上所述,函数中的任何操作都<strong>不会</strong>影响到最初的<code>foo</code>,我们操作的只不过是它的<strong>副本</strong>。</li> +</ul> + +<p>这就是为什么说所有基本类型的值都是无法改变的。</p> + +<h2 id="JavaScript_中的基本类型包装对象">JavaScript 中的基本类型包装对象</h2> + +<p>除了 <code>null</code> 和 <code>undefined</code>之外,所有基本类型都有其对应的包装对象:</p> + +<ul> + <li>{{jsxref("String")}} 为字符串基本类型。</li> + <li>{{jsxref("Number")}} 为数值基本类型。</li> + <li>{{jsxref("BigInt")}} 为大整数基本类型。</li> + <li>{{jsxref("Boolean")}} 为布尔基本类型。</li> + <li>{{jsxref("Symbol")}} 为字面量基本类型。</li> +</ul> + +<p>这个包裹对象的<a href="/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf"><code>valueOf()</code></a>方法返回基本类型值。</p> + +<h2 id="了解更多">了解更多</h2> + +<h3 id="基本知识">基本知识</h3> + +<ul> + <li><a href="/zh-CN/docs/Web/JavaScript/Data_structures">JavaScript 数据类型和数据结构</a></li> + <li>维基百科上的{{Interwiki("wikipedia", "Primitive data type", "基本类型")}}</li> +</ul> + +<ol> + <li><a href="/zh-CN/docs/Glossary">术语表</a> + + <ol> + <li>{{Glossary("JavaScript")}}</li> + <li>{{Glossary("string")}}</li> + <li>{{Glossary("number")}}</li> + <li>{{Glossary("bigint")}}</li> + <li>{{Glossary("boolean")}}</li> + <li>{{Glossary("null")}}</li> + <li>{{Glossary("undefined")}}</li> + <li>{{Glossary("symbol")}}</li> + </ol> + </li> + <li><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures">JavaScript 数据类型和数据结构</a></li> +</ol> |