[译]揭秘基本数据类型

栏目: JavaScript · 发布时间: 5年前

内容简介:原文地址:基本类型(基本数值,基本数据类型)是一种既非对象,也无方法的数据。在JavaScript中,共有六中基本类型:string、number、boolean、null、undefined、symbol(ECMAScript 2015新增)。多数情况下,基本类型代表了最底层的语言实现。

原文地址: developer.mozilla.org/en-US/docs/…

基本类型(基本数值,基本数据类型)是一种既非对象,也无方法的数据。在JavaScript中,共有六中基本类型:string、number、boolean、null、undefined、symbol(ECMAScript 2015新增)。

多数情况下,基本类型代表了最底层的语言实现。

所有基本类型的值都是不可改变的。但需要注意的是,基本类型本身和一个赋值为基本类型的变量的区别。变量会被赋予一个新值,而原值不能像对象、数据以及函数那样被改变。

示例1

这个示例会帮助你了解基本类型不可改变的事实。

// 使用字符串方法不会改变一个字符串
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
复制代码

基本类型值可以被替换,但不能被改变。

示例2

下面的示例将让你体会到JavaScript是如何处理基本类型的。

// 基本类型
let foo = 5;

// 定义一个貌似可以改变基本类型值的函数
function addTwo(num) {
   num += 2;
}
// 和前面的函数一样
function addTwo_v2(foo) {
    foo += 2;
}

// 调用第一个函数,并传入基本类型值作为参数
addTwo(foo); // 获取到当前的基本类型值
console.log(foo);   // 5

// 尝试调用第二个函数...
addTwo_v2(foo);
console.log(foo);   // 5
复制代码

你是否认为会得到 7 ,而不是 5 ?如果是,请看看代码是如何运行的:

  • addTwoaddTwo_v2 函数调用时,JavaScript会检查标识符 foo 的值,从而准确无误的找到第一行实例化变量的声明语句。

  • 找到以后,JavaScript将其作为参数传递给函数的形参。

  • 在执行函数体内的语句之前,JavaScript会将传递进来的参数(基本类型的值)复制一份,创建一个 本地副本 。这个副本只存在于该函数的作用域中,我们能够通过指定在函数中的标识符访问到它( addTwo 中的 numaddTwo_v2 中的 foo )。

  • 接下来,函数体中的语句开始执行

    • 第一个函数中,创建了本地 num 参数, num 的值加2,但这个值并不是原来的 foo 的值。

    • 第二个函数中,创建了本地参数 foo ,并将它的值加2,这个值不是外部 foo 的值。在这种情况下,外部的 foo 变量不能以任何方式被访问到。这是因为JavaScript的词法作用域(lexical scoping)所导致的变量覆盖,本地的变量 foo 覆盖了外部的变量 foo 。欲知详情,请参阅闭包。

  • 综上所述,函数中的任何操作都不会影响到最初的 foo ,我们操作的只不过是它的副本。

这就是为什么说所有基本类型的值都是不可改变的。


以上所述就是小编给大家介绍的《[译]揭秘基本数据类型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java编程思想

Java编程思想

[美] Bruce Eckel / 陈昊鹏、饶若楠 / 机械工业出版社 / 2005-9 / 95.00元

本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。 从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到......一起来看看 《Java编程思想》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具