个性化阅读
专注于IT技术分析

JS数据类型 – JavaScript教程

上一章JavaScript教程请查看:JS生成输出

在本教程中,你将了解JavaScript中可用的数据类型。

JavaScript中的数据类型

数据类型基本上指定了在程序中可以存储和操作的数据类型。

JavaScript中有六种基本数据类型,可以分为三大类:基本数据类型(或主数据类型)、复合数据类型(或引用数据类型)和特殊数据类型。字符串、数字和布尔是基本数据类型,对象、数组和函数(它们都是对象的类型)是组合数据类型,而Undefined和Null是特殊的数据类型。

原始数据类型一次只能保存一个值,而复合数据类型可以保存值和更复杂实体的集合,让我们详细讨论一下它们中的每一个。

字符串数据类型

字符串数据类型用于表示文本数据(即字符序列),字符串是使用一个或多个字符周围的单引号或双引号创建的,如下所示:

var a = 'Hi there!';  // 使用单引号
var b = "Hi there!";  // 使用双引号

你可以在字符串中包含引号,只要它们不匹配封闭的引号即可。

var a = "Let's go."; // 双引号包含单引号
var b = 'He said "Hello" and left.';  // 单引号包含双引号
var c = 'We\'ll never give up.';     // 用反斜杠转义单引号 

数据类型

数字数据类型用于表示带或不带小数点的正数或负数,或使用指数符号表示的数字,如1.5e-4(相当于1.5×10^-4)。

var a = 25;         // 整数
var b = 80.5;       // 浮点数
var c = 4.25e+6;    // 指数表示法,与4.25e6或4250000相同
var d = 4.25e-6;    // 指数表示法,和0.00000425一样

数字数据类型还包括一些特殊的值:∞、-∞(Infinity, -Infinity)和NaN,∞表示数学上的无穷大,它大于任何数,无穷大是一个非零数除以0的结果,如下所示:

alert(16 / 0);  // 输出: Infinity
alert(-16 / 0); // 输出: -Infinity
alert(16 / -0); // 输出: -Infinity

而NaN表示一个特殊的非数字值,它是一个无效的或未定义的数学运算的结果,比如求-1的平方根或0除以0,等等。

alert("Some text" / 2);       // 输出: NaN
alert("Some text" / 2 + 10);  // 输出: NaN
alert(Math.sqrt(-1));         // 输出: NaN

布尔数据类型

布尔数据类型只能包含两个值:true或false,它通常用于存储诸如yes (true)或no (false)、on (true)或off (false)等值,如下所示:

var isReading = true;   // yes
var isSleeping = false; // no

布尔值也是程序比较的结果,下面的示例比较两个变量,并在警告对话框中显示结果

var a = 2, b = 5, c = 10;
 
alert(b > a) // 输出: true
alert(b > c) // 输出: false

未定义的数据类型undefined

未定义的数据类型undefined只能有一个值—未定义的特殊值undefined,如果已经声明了一个变量,但没有给它赋值,则该变量的值为undefined。

var a;
var b = "Hello World!"
 
alert(a) // 输出: undefined
alert(b) // 输出: Hello World!

空数据类型null

这是另一种特殊的数据类型,它只能有一个值—null值,空值null表示没有值,它并不等价于空字符串(“”)或0,它只是什么都不是。

通过为变量赋为null,可以显式地清空其当前内容。

var a = null;
alert(a); // 输出: null
 
var b = "Hello World!"
alert(b); // 输出: Hello World!
 
b = null;
alert(b) // 输出: null

对象数据类型object

对象object是一个复杂的数据类型,它允许你存储数据集合。

对象包含属性,定义为键值对。属性键(名称)总是一个字符串,但是值可以是任何数据类型,比如字符串、数字、布尔值,或者复杂的数据类型,比如数组、函数和其他对象。在接下来的章节中,你会学到更多关于对象的知识。

下面的示例将向你展示用JavaScript创建对象的最简单方法。

var emptyObject = {};
var person = {"name": "Peter", "surname": "Smith", "age": "36"};
 
// 更好的格式
var car = {
    "modal": "BMW X3",
    "color": "white",
    "doors": 5
}

如果属性名是有效的JavaScript名称,可以省略属性名周围的引号。这意味着在“first-name”周围需要引号,但在“firstname”周围是可选的,所以上面例子中的car对象也可以写成:

var car = {
    modal: "BMW X3",
    color: "white",
    doors: 5
}

数组数据类型array

array数组是一种对象类型,用于在单个变量中存储多个值。数组中的每个值(也称为元素)都有一个数字位置,称为索引,它可以包含任何数据类型的数据—数字、字符串、布尔值、函数、对象,甚至其他数组。数组索引从0开始,因此第一个数组元素是arr[0]而不是arr[1]。

创建数组最简单的方法是将数组元素指定为一个用逗号分隔的列表,用方括号括起来,如下例所示:

var colors = ["Red", "Yellow", "Green", "Orange"];
var cities = ["London", "Paris", "New York"];
 
alert(colors[0]);   // : Red
alert(cities[2]);   //  : New York

函数数据类型function

function函数是可调用的对象,它执行一个代码块。由于函数是对象,所以可以将它们赋值给变量,如下例所示:

var greeting = function(){ 
    return "Hello World!"; 
}
 
// 查看greeting变量
alert(typeof greeting) // 输出: function
alert(greeting());     // 输出: Hello World!

实际上,函数可以在任何地方使用,任何其他值都可以使用。函数可以存储在变量、对象和数组中。函数可以作为参数传递给其他函数,也可以从函数返回函数。考虑以下功能:

function createGreeting(name){
    return "Hello, " + name;
}
function displayGreeting(greetingFunction, userName){
    return greetingFunction(userName);
}
 
var result = displayGreeting(createGreeting, "Peter");
alert(result); // 输出: Hello, Peter

typeof操作符

类型运算符typeof可用于查找变量或操作数包含的数据类型,它可以与括号(typeof(x)或typeof x)一起使用,也可以不带括号。

typeof运算符在需要以不同方式处理不同类型值的情况下特别有用,但是需要非常小心,因为在某些情况下可能会产生意外的结果,如下面的例子所示:

// Numbers
typeof 15;  // 返回: "number"
typeof 42.7;  // 返回: "number"
typeof 2.5e-4;  // 返回: "number"
typeof Infinity;  // 返回: "number"
typeof NaN;  // 返回: "number". "Not-A-Number"
 
// Strings
typeof '';  // 返回: "string"
typeof 'hello';  // 返回: "string"
typeof '12';  // 返回: "string". 
 
// Booleans
typeof true;  // 返回: "boolean"
typeof false;  // 返回: "boolean"
 
// Undefined
typeof undefined;  // 返回: "undefined"
typeof undeclaredVariable; // 返回: "undefined"
 
// Null
typeof Null;  // 返回: "object"
 
// Objects
typeof {name: "John", age: 18};  // 返回: "object"
 
// Arrays
typeof [1, 2, 4];  // 返回: "object"
 
// Functions
typeof function(){};  // 返回: "function"

在上面的示例中,你可以清楚地看到,当我们使用typeof操作符(第22行)测试null值时,它返回的是“object”而不是“null”。

这是JavaScript中一个长期存在的bug,但是由于web上有很多代码都是围绕这种行为编写的,因此修复它会产生更多的问题,所以修复这个问题的想法被设计和维护JavaScript的委员会拒绝了。

赞(0)
未经允许不得转载:srcmini » JS数据类型 – JavaScript教程

评论 抢沙发

评论前必须登录!