JavaScript 深入理解之基本数据类型(Primitive Values)

变量是内存中被分配的指定空间的名字, 而变量的值是这个空间中的存储的数据。
JavaScript 是个动态类型的编程语言(关于语言的分类可以研究一下这篇文字 类型系统(Type System)

变量本身数据类型不固定的语言称之为动态语言。
与之相反的是静态类型的编程语言,指的是在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。

JavaScript 的变量的数据类型可以分为两类:基本类型(Primitive Values)和引用类型(Reference Values),基本类型也称为简单类型,由于其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈中,即按值访问。

基本类型主要有五种:

  • String
  • Number
  • Boolean
  • Null
  • undefined
  • ES6新增了 Symbol(Symbol 生成一个全局的唯一的值)。

基本类型在内存中占据空间小且大小固定 ,他们的值保存在栈(stack)空间,是按值来访问。就是说你可以操作保存在变量中的实际值。

在 JavaScript 里变量的存储包含三个部分:

  • 栈区的变量标示符;
  • 栈区变量的值;
  • 堆区存储的对象。

基本类型的数据类型有以下4个特点:

一、值不可变

任何方法都无法改变一个基本类型的值,比如一个字符串:

var blog = 'Felix';
var blogLower = blog. toLowerCase(); // toLowerCase 函数返回一个新字符串
console.log(blogLower) // 'felix'
console.log(blog); //  'Felix'

var blogSub = blog.substring(0, 3); // substring 函数返回一个新字符串
console.log(blogSub); // 'Fel'
console.log(blog); // 'Felix'

上面的代码,我们可以看到 blog 在调用字符串函数 toLowerCase 和 substring 后并未发生改变。toLowerCase 和 substring 返回的都是一个新的字符串。

var user = 'Felix';
user.age = 32;
user.getName = function(){//...};
 
console.log(user.age); // undefined
console.log(user.getName); // undefined

通过上面的代码可知,我们不能给基本类型的数据添加属性和方法,再次说明基本类型的数据是不可变的。

二、值的比较

如下代码

var a = 1;
var b = true;
console.log(a == b); // true

这里其实这是隐式类型转换(Implicit Type Conversion)和 == 运算符的知识了,也就是说在用 == 比较两个不同类型的变量时会进行一些隐式类型转换。像上面的比较先会把 a 的数字 1 转换为 true 再和数字 b 进行比较,结果就是 true 了。 这是当比较的两个值的类型不同的时候 == 运算符会进行隐式类型转换,因此在做比较运算时,即使两个值和类型都相同,也强烈建议使用 === 。

三、存放在栈区的

栈区指内存中的栈内存,假如有以下几个基本类型的变量:

var name = 'Felix';
var isStudent = true;
var age = 32;

那么它的存储结构如下图:

栈区包括了变量的标识符和变量的值。

四、 typeOf 操作符检测

基本数据类型的数据类型检测使用 typeOf() 函数,除 null,null 有属于自己的数据类型 Null 。

typeof ''; // string 有效
typeof 1; // number 有效
typeof Symbol(); // symbol 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof null; //object 无效
  • 对于引用类型,除 function 以外,一律返回 object 类型。
  • 对于 function 返回 function 类型。
typeof [] ; //object 无效
typeof new Function(); // function 有效
typeof new Date(); //object 无效
typeof new RegExp(); //object 无效

你可能感兴趣的:(JavaScript 深入理解之基本数据类型(Primitive Values))