本节书摘来自异步社区《JavaScript面向对象精要》一书中的第1章,第1.2节,作者:【美】Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 原始类型

原始类型代表照原样保存的一些简单数据,如true和25。JavaScript共有5种原始类型,如下。

Boolean  布尔,值为true或false

Number  数字,值为任何整型或浮点数值

String   字符串,值为由单引号或双引号括出的单个字符或连续字符(JavaScript不区分字符类型)

Null    空类型,该原始类型仅有一个值:null

Undefined 未定义,该原始类型仅有一个值:undefined(undefined会被赋给一个还没有初始化的变量)

前3种类型(boolean,number和string)表现的行为类似,而后2种(null和undefined)则有一点区别,本章后面将会讨论。所有原始类型的值都有字面形式。字面形式是不被保存在变量中的值,如硬编码的姓名或价格。下面是每种类型使用字面形式的例子。

// strings
var name = "Nicholas";
var selection = "a";// numbers
var count = 25;
var cost = 1.51;// boolean
var found = true;// null
var object = null;// undefined
var flag = undefined;
var ref;  // assigned undefined automatically

JavaScript和许多其他语言一样,原始类型的变量直接保存原始值(而不是一个指向对象的指针)。当你将原始值赋给一个变量时,该值将被复制到变量中。也就是说,如果你使一个变量等于另一个时,每个变量有它自己的一份数据拷贝。例如,

var color1 = "red";
var color2 = color1;

这里,color1被赋值为“red”。变量color2被赋予color1的值,这样变量color2中就保存了“red”。虽然color1和color2具有同样的值,但是两者毫无关联,改变color1的值不会影响color2,反之亦然。这是因为存在两个不同的储存地址,每个变量拥有一个。图1-1展示了这段代码的变量对象。

因为每个含有原始值的变量使用自己的存储空间,一个变量的改变不会影响到其他变量。例如,

var color1 = "red";
var color2 = color1;console.log(color1);  // "red"
console.log(color2);  // "red"color1 = "blue";console.log(color1);  // "blue"
console.log(color2);  // "red"

在这段代码中,color1被改为“blue”,而color2还保有原来的值“red”。

1.2.1 鉴别原始类型
鉴别原始类型的最佳方法是使用typeof操作符。它可以被用在任何变量上,并返回一个说明数据类型的字符串。Typeof操作符可用于字符串、数字、布尔和未定义类型。下面是typeof对不同原始类型的输出。

console.log(typeof "Nicholas");  // "string"
console.log(typeof 10);       // "number"
console.log(typeof 5.1);    // "number"
console.log(typeof true);    // "boolean"
console.log(typeof undefined); // "undefined"

正如我们所期望的,对于字符串,typeof将返回“string”,对于数字将返回“number”(无论整型还是浮点数),对于布尔类型将返回“Boolean”,对于未定义类型将则返回“undefined”。

至于空类型则有一些棘手。

下面那行代码的运行结果困扰了很多开发者。

console.log(typeof null);   // "object"

当你运行typeof null时,结果是“object”。但这是为什么呢?(其实这已经被设计和维护JavaScript的委员会TC39认定是一个错误。在逻辑上,你可以认为null是一个空的对象指针,所以结果为“object”,但这还是很令人困惑。)

判断一个值是否为空类型的最佳方法是直接和null比较,如下。

console.log(value === null);   // true or false

非强制转换比较

注意这段代码使用了三等号操作符(===)而不是双等号。原因是三等号在进行比较时不会将变量强制转换为另一种类型。为了理解这点,请看下面的例子。

console.log("5" == 5);         // true
console.log("5" === 5);         // falseconsole.log(undefined == null);   // true
console.log(undefined === null);   // false

当你使用双等号进行比较时,双等号操作符会在比较之前把字符串转换成数字,因此认为字符串“5”和数字5相等。三等号操作符认为这两个值的类型不同,因此不相等。同样原因,当你比较undefined和null时,双等号认为它们相等而三等号认为不相等。当你试图鉴别null时,使用三等号才能让你正确鉴别出类型。
1.2.2 原始方法
虽然字符串、数字和布尔是原始类型,但是它们也拥有方法(null和undefined没有方法)。特别是字符串有很多方法,可以帮助你更好地使用它们。例如,

var name = "Nicholas";
var lowercaseName = name.toLowerCase();   // convert to lowercase
var firstLetter = name.charAt(0);       // get first character
var middleOfName = name.substring(2, 5);  // get characters 2-4var count = 10;
var fixedCount = count.toFixed(2);   // convert to "10.00"
var hexCount = count.toString(16);   // convert to "a"var flag = true;
var stringFlag = flag.toString();       // convert to "true"

注意:
尽管原始类型拥有方法,但它们不是对象。JavaScript使它们看上去像对象一样,以此来提供语言上的一致性体验,你会在本章后面看到这点。

《JavaScript面向对象精要》——1.2 原始类型相关推荐

  1. 《JavaScript面向对象精要》——1.8 原始封装类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.8节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  2. 《JavaScript面向对象精要》——第1章 原始类型和引用类型1.1 什么是类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.1节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  3. 《JavaScript面向对象精要》——第1章 原始类型和引用类型 1.1 什么是类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.1节,作者:[美]Nicholas C. Zakas著,更多章节内容可以访问云栖社区"异步社区&qu ...

  4. 《JavaScript面向对象精要》读书笔记

    JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...

  5. 《JavaScript面向对象精要》——1.9 总结

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.9节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  6. 《JavaScript 面向对象精要》 读书笔记

    <JavaScript 面向对象精要> 读书笔记 高程面向对象这块内容介绍的比较浅显,个人觉得这本小书是高程的补充,看完之后觉得收获匪浅,所以做了个笔记,以备后询 1. 原始类型和引用类型 ...

  7. javascript面向对象精要学习总结(第一章 类型)

    原始类型共5种 string | number | boolean | undefined | null 内建引用类型共5种 Date | Error | Function | Object | Re ...

  8. JavaScript面向对象精要(二)

    四.构造函数和原型对象 1. 构造函数 构造函数就是用new创建对象时调用的函数.使用构造函数的好处在于所有用同一个构造函数创建的对象都具有同样的属性和方法. function Person(){} ...

  9. JavaScript面向对象精要(一)

    数据类型 在JavaScript中,数据类型分为两类: 原始类型 保存一些简单数据,如true,5等.JavaScript共有5中原始类型: boolean:布尔,值为true或false numbe ...

最新文章

  1. 让浏览器开挂的插件,测评师教你如何选
  2. 支付通道接口异常统计上报
  3. exportfs+NFS客户端问题
  4. SpringIOC容器介绍
  5. 【MFC系列2】Win32项目转换为MFC项目
  6. sql server2005索引
  7. 几个实用的Servlet应用例子-入门、cookie、session及上传文件
  8. linux 目录定义,linux根目录定义
  9. 关于python django开发过程中的常见的问题及解决办法总结
  10. pycharm2019新建python文件_PyCharm 2019安装教程
  11. FastJson漏洞
  12. 注解@Mapper、@MapperScan
  13. UIView layer 的对应关系
  14. OrCAD的下载与安装的详细步骤
  15. java coap_CoAP协议-以Californium(Java)为例的CoAP初步实现
  16. 光纤猫下接路由器的设置教程
  17. 更新Android版GPS定位源代码
  18. STVD使用printf输出数据错误
  19. 什么是GIS,GIS能干什么
  20. C语言 字符串-字符串的复制

热门文章

  1. 增强幸福感的五种方法
  2. 许家印砸1000亿布局AI、量子计算等领域,但在科技圈只能算轻壕
  3. 霍金这次想帮AI说点好话,后来没忍住……
  4. Linux的常用命令练习
  5. [Java] 变量里存的到底是什么
  6. 5.1linux_ubuntu常见安装问题
  7. 小白该如何学习Linux操作系统(1)
  8. plsql配置连接远程数据库
  9. Postman 根据nginx日志查账号
  10. Java程序员已经饱和了,还有必要培训Java编程嘛