Java教程

第3章 JavaScript的数据类型

本文主要是介绍第3章 JavaScript的数据类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

3.1 数据类型的定义

数据类型决定了一个数据的特征,即限定了该数据必须按照一定的规则进行操作。在程序设计中也 是如此,特定数据类型的数据会有其相应的行为模式。

JavaScript 中有以下 5 种基本数据类型。

  • 字符串型
  • 数值型
  • 布尔型
  • null 型
  • undefined 型
    在这 5 种基本数据类型之外的都被称为 Object 类型。也就是说,总的来看,JavaScript 中的数据类型可以分为 6 种。

3.1.1 在数据类型方面与 Java 作比较

动态数据类型与静态数据类型

像 Java 这样,变量具有数据类型的语言,被称为静态数据类型语言;而像 JavaScript 这样,变量没有类型的语言,则被称为动态数据类型语言。

基于类与基于原型

对于 Java 来说,内建类型(int 或 double 之类)之外的都是用户自定义类型。用户自定义类型又可以分为类和接口两种类型。Java 的用户自定义类型的使用方法,从其名称中就可略知一二,即开发者需要书写该类型的定义语句来定义该类型。而对象则作为这些由用户定义的数据类型的实例(实体)存在。这就是 Java 的基本特性。这种编程风格被称为基于类的语言风格。

另一方面,在 JavaScript 的语言规范中,不存在定义数据类型的语句。不需要使用特别的语句就能定义一个对象的属性或方法,而这样也就决定了该对象的类型。所谓类型也就是行为方式上的共性。由于每个对象都具有共同的行为方式,所以可以使用原型对象。这样的编程风格被称为基于原型的风格。

3.1.2 基本数据类型和引用类型

虽然 JavaScript 的变量不具有数据类型,但从概念上,JavaScript 变量可以分为基本数据类型变量和引用类型变量。基本数据类型变量直接保存有数值等类型的数据的值,而引用类型变量则保存有对象的引用。尽管表面上两者没有区别,但其内在是不同的。因此为了正确地理解其内部实现原理,就需要引入引用这一概念.

3.2 内建数据类型概要

在 ECMAScript 标准中,内建数据类型(built-in type)分为 5 种基本数据类型以及 Object 类型。

JavaScript 的基本数据类型

avaScript 的字符串型是基本数据类型,而 Java 的字符串型并不是基本数据类型,这是两者的区别之一。不过,其实两者在本质上并没有太大的不同。因为在 Java 中,字符串型和字面量以及运算符一样,属于被特别对待的 Object 类型。字符串连接运算符(+ 号)在 Java 和 JavaScript 中的作用也是相同的。在 JavaScript 中,字符串值会被隐式地转换为字符串对象类型。熟悉 Java 的人很容易就能掌握JavaScript 中字符串型的用法。不过在 JavaScript 中不存在字符类型。如果需要表达某个字符的话,请使用长度为 1 的字符串值。

JavaScript 只有一种数值类的数据类型,其内部构造为 64 位的浮点小数,这相当于 Java 中的 double 类型。和 JavaScript的情况不同,在 Java 中有 5 种整数类型和 2 种浮点数类型。JavaScript 之所以只支持一种数值类型,是由于设计当初更多地着眼于降低编程难度,而非提升运行效率。如果有多种数值类型,就不得不在考虑在进行赋值时考虑是否会产生错误。而 JavaScript 数值只有一种数值数据类型,除了部分特殊情况,通常不会发生类型转换错误。从另一方面来说,由于数值类型能够与其他类型进行隐式转换,所以仍然存在大量陷阱。

布尔型在 Java 和 JavaScript 中是没有区别的,同样都是使用 true 和 false 的字面量。

null 类型的值只有 null 一种情况,并且 null 属于字面量。虽然 Java 中也存在 null 这一字面量,但是没有 null 类型,null只是一种可以被引用的值而已。尽管有这样的差别,但是 Java 中的 null 和 JavaScript 中的 null 在用法上几乎没有区别,只需要注意一下类型转换的问题即可。

undefined 类型是指未定义的值的类型,这一概念在 Java 中是不存在的。如果在 Java 中使用类似于 undefined 类型的值的话,就会发生编译错误。

3.3 字符串型

3.3.1 字符串字面量

// 字符串值可以通过字符串字面量来表示。
// 字符串字面量需要用双引号(")或单引号(')括起来。
var hzh = "hzh";  // 将字符串"hzh"值赋给变量hzh
console.log("hzh:" + hzh); // 显示变量hzh的值

var hzh = 'hzh'; // 将字符串"hzh"值赋给变量hzh
console.log("hzh:" + hzh); // 显示变量hzh的值

image

特殊字符可以通过转义字符(串)来表示。可以通过在转义符之后使用特定字符,来表达一些特殊的含义。转义符是反斜杠(\)。例如,\n 是换行符的表达方式。

image

// 因为可以用两种引号来包围字符串字面量
// 所以只要对此加以活用,就能够少用转义字符。
// 例如,在包含大量双引号的字符串字面量外使用单引号,
// 就能够减少转义字符的出现。
// 对于双引号不需要使用转义字符(当然转义字符也没有问题)
var hzh1 = '我说"黄子涵是帅哥!"';
console.log("hzh1 = " + hzh1);

image

3.3.2 字符串型的运算

// 如果在右侧书写的是值为字符串值的变量,也一样能将其值赋值给等号左侧的变量。
var hzh1 = '黄子涵';             // 将字符串值'黄子涵'赋值给变量hzh
var hzh2 = hzh1;                // 将变量hzh1赋值给变量hzh2
console.log("hzh1:" + hzh1);   // 输出变量hzh1的值
console.log("hzh2:" + hzh2);   // 变量hzh2的值为字符串'黄子涵'
console.log("**************************************************");

console.log("**************************************************");
// 不过 JavaScript 确实和Java 一样,其字符串型是不可变类型。
var hzh3 = "黄子涵";
var hzh4 = "是帅哥!"
var hzh5 = hzh3 + hzh4;         // 连接字符串值
console.log("hzh3:" + hzh3);   // 变量hzh5的值为字符串值“黄子涵是帅哥!”
console.log("hzh4:" + hzh4);
console.log("hzh5:" + hzh5);
console.log("**************************************************");

console.log("**************************************************");
// += 运算符可以在连接字符串的同时进行赋值。
var hzh6 = "黄子涵";
hzh6 += "是靓仔!"
console.log("hzh6:" + hzh6);  // 变量hzh6的值为字符串值“黄子涵是靓仔”
console.log("**************************************************");

console.log("**************************************************");
var hzh7 = "黄子涵";
var hzh8 = hzh7;
hzh7 += "真厉害!"             // 变量hzh7的值为字符串值“黄子涵真厉害”
console.log("hzh7:" + hzh7);
console.log("hzh8:" + hzh8); // 变量hzh8的值仍保持为字符串值“黄子涵”
console.log("**************************************************");

console.log("**************************************************");
// 可以通过typeof运算符来获知值的数据类型
console.log(typeof "黄子涵");            // 对字符串字面量进行typeof运算

var hzh9 = "黄子涵";
console.log(typeof hzh9);               // 对变量hzh9进行typeof运算
console.log(typeof (hzh9));             // 也可以添加括号
console.log(typeof (typeof (hzh9)));    // typeof运算的结果也是字符串值

image

3.3.3 字符串型的比较

JavaScript 有两种等值运算符,即 === 和 。与之对应,也有两种不等运算符 ! 和 !=。

=== 和 == 的区别在于,在比较的时候是否会进行数据类型的转换。=== 在比较的时候不会对数据类型进行转换。在ECMAScript 标准中,将其称为严格相等(strict equal)。

console.log("**************************************************");
// 如果只考虑字符串之间的比较,=== 和 == 的结果是没有区别的。
// 两种方式都会判断字符串的内容是否一致。
var hzh1 = "黄子涵";
var hzh2 = "是帅哥";
var hzh3 = hzh1 + hzh2;
console.log("hzh1 == hzh2?" + (hzh1 == hzh2));
console.log("hzh1 == hzh3?" + (hzh1 == hzh3));
console.log("hzh2 == hzh3?" + (hzh2 == hzh3));
console.log("hzh1 != hzh2?" + (hzh1 != hzh2));
console.log("hzh1 != hzh3?" + (hzh1 != hzh3));
console.log("hzh2 != hzh3?" + (hzh2 != hzh3));
console.log("**************************************************");

console.log("**************************************************");
//对字符串值的比较基于 Unicode 字符的编码值(编码位置)。
var hzh4 = "hzh";
var hzh5 = "HZH";
console.log("hzh4 < hzh5?" + (hzh4 < hzh5));
console.log("hzh4 <= hzh5?" + (hzh4 <= hzh5));
console.log("hzh4 > hzh5?" + (hzh4 > hzh5));
console.log("hzh4 >= hzh5?" + (hzh4 >= hzh5));
console.log("**************************************************");

image

3.3.4 字符串类(String 类)

3.3.5 字符串对象

3.3.6 避免混用字符串值和字符串对象

3.3.7 调用 String 函数

3.3.8 String 类的功能

3.3.9 非破坏性的方法

3.4 数值型

3.4.1 数值字面量

3.4.2 数值型的运算

3.4.3 有关浮点数的常见注意事项

3.4.4 数值类(Number 类)

3.4.5 调用 Number 函数

3.4.6 Number 类的功能

3.4.7 边界值与特殊数值

3.4.8 NaN

3.5 布尔型

3.5.1 布尔值

console.log("**************************************************");
// 布尔型也被称为逻辑值类型或者真假值类型。
// 布尔型只能够取真(true)和假(false)两种数值。
// 除此以外,其他的值都不被支持。
var hzh1 = true;
console.log("它们是true还是false?");
console.log("hzh1?" + hzh1);
console.log("(!hzh1)?" + (!hzh1));    // true的否定为false
console.log("(!!hzh1)?" + (!!hzh1));   // 否定的否定为肯定
console.log("**************************************************");

console.log("**************************************************");
// 对布尔值进行 typeof 运算的话,得到的结果为 "Boolean"。
console.log("它们是什么数据类型?");
console.log("true?" + true);
console.log("false?" + false);
console.log("hzh1?" + hzh1);
console.log("(!hzh1)?" + (!hzh1));    // true的否定为false
console.log("(!!hzh1)?" + (!!hzh1));   // 否定的否定为肯定
console.log("**************************************************");

image

3.5.2 布尔类(Boolean 类)

3.5.3 Boolean 类的功能

3.6 null型

3.7 undefined型

3.8 Object类型

3.9 数据类型转换

3.9.1 从字符串值转换为数值

3.9.2 从数值转换为字符串值

3.9.3 数据类型转换的惯用方法

3.9.4 转换为布尔型

3.9.5 其他的数据类型转换

3.9.6 从 Object 类型转换为基本数据类型

3.9.7 从基本数据类型转换为 Object 类型

这篇关于第3章 JavaScript的数据类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!