《JavaScript面向对象精要》——1.2 原始类型-阿里云开发者社区

开发者社区> 异步社区> 正文

《JavaScript面向对象精要》——1.2 原始类型

简介:
+关注继续查看

本节书摘来自异步社区《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展示了这段代码的变量对象。
screenshot

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

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);         // false

console.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-4

var 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面向对象编程指南(第2版)》——1.7 OOP小结
本节书摘来自异步社区《JavaScript面向对象编程指南(第2版)》一书中的第1章,第1.7节,作者:【加拿大】Stoyan Stefanov著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1242 0
《JavaScript面向对象编程指南(第2版)》——1.6 面向对象的程序设计
现在,我们就来详细了解每个概念。当然,如果您在面向对象程序设计方面是一个新手,或者不能确定自己是否真的理解了这些概念,那也不必太过担心。以后我们还会通过一些代码来为您具体分析它们。尽管这些概念说起来好像很复杂、很高级,但一旦我们进入真正的实践,事情往往就会简单得多。
1306 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3962 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5694 0
前端学习笔记(3) - JavaScript对象分类
JavaScript中的对象分类 宿主对象(host Objects):由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定。 内置对象(Built-in Objects):由 JavaScript 语言提供的对象。
478 0
JavaScript进阶【三】JavaScript面向对象的基础知识复习
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/79547464 ...
687 0
JavaScript 面向对象编程之一
一:Class and private And public JS 中的类以 function 进行声明,同时 JS 也支持声明私有 private 和公有 public 成员,只不过跟 C# 不一样,它们不是使用这两个关键字实现的。
626 0
JavaScript使用原型判断对象类型
1. constructor属性 在JavaScript创建对象(二)——构造函数模式中,我们说过可以使用对象的constructor属性判断对象的类型:p1.constructor === Person,可能当时就有细心的读者会想,我们并没有给这个对象添加过constructor,这个属性是从哪儿来的呢?讲过原型之后,我们知道这个属性是原型中的,所以一般重写原型时也都会把constructor补上。
1103 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
11935
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载