基本数据类型

基本类型(基本数值、基本数据类型)是一种既非对象也无方法的数据。在 JavaScript 中,共有7种基本类型:stringnumberbigint

booleannullundefinedsymbol (ECMAScript 2016新增)。

多数情况下,基本类型直接代表了最底层的语言实现。
所有基本类型的值都是不可改变的。但需要注意的是,基本类型本身和一个赋值为基本类型的变量的区别。变量会被赋予一个新值,而原值不能像数组、对象以及函数那样被改变。

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

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

JavaScript是如何处理基本类型的。

// 基本类型
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

为什么是 5 而不是 7 呢
代码运行过程:

  • addTwo和addTwo_v2函数调用时,JavaScript会检查标识符foo的值,从而准确无误的找到第一行实例化变量的声明语句。
  • 找到以后,JavaScript将其作为参数传递给函数的形参。
  • 在执行函数体内语句之前,JavaScript会将传递进来的参数(基本类型的值)复制一份,创建一个本地副本。这个副本只存在于该函数的作用域中,我们能够通过指定在函数中的标识符访问到它(addTwo中的num,addTwo_v2中的foo)。
  • 接下来,函数体中的语句开始执行:
  • 第一个函数中,创建了本地num参数,num的值加2,但这个值并不是原来的foo的值。
  • 第二个函数中,创建了本地参数foo,并将它的值加2,这个值不是外部foo的值。在这种情况下,外部的foo变量不能以任何方式被访问到。这是因为JavaScript的词法作用域(lexical scoping)所导致的变量覆盖,本地的变量foo覆盖了外部的变量foo。欲知详情,请参阅闭包。
    综上所述,函数中的任何操作都不会影响到最初的foo,我们操作的只不过是它的副本。

除了 null 和 undefined之外,所有基本类型都有其对应的包装对象:

  • String 为字符串基本类型。
  • Number 为数值基本类型。
  • BigInt 为大整数基本类型。
  • Boolean 为布尔基本类型。
  • Symbol 为字面量基本类型。

undefine

var x; //创建一个变量,但并没有赋值
console.log("X的值是", x)  //返回X的值是undefined

严格相等和undefined
你可以使用undefined和严格相等或不相等操作符来决定一个变量是否拥有值。在下面的代码中,变量x是未定义的,if 语句的求值结果将是true

var x;

if (x === undefined) {
console.log("x没有赋值");

} else {
console.log("x不是undefined类型");
}

注意:这里是必须使用严格相等操作符(=)而不是标准相等操作符(),因为 x == undefined 会检查x是不是null,但是严格相等不会检查(有点饶人,其实 === 会严格判断双方的类型、值等是否相等)。null不等同于undefined。

null
在计算机学科, null 值一直是一个被讨论点,通常来说,表示一个不存在或者无效object或者地址引用。语言实现中空引用的含义各不相同。

posted @ 2021-06-03 17:56  .爬行的蜗牛  阅读(118)  评论(0编辑  收藏  举报
Document