上一章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的委员会拒绝了。
评论前必须登录!
注册