Javascript学习笔记-基本概念-数据类型
1、typeof
操作符的返回值:
- "undefined"——如果这个值未定义;
- "boolean"——如果这个值是布尔值;
- "string"——如果这个值是字符串;
- "number"——如果这个值是数值;
- "object"——如果这个值是对象或null;14
- 141"function"——如果这个值是函数。
使用例子:
var message = "some string"; alert(typeof message); // "string" alert(typeof(message)); // "string" alert(typeof 95); // "number"
2、undefined
使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如:
var message; alert(message == undefined); //true
以上和下面的是对等的。
var message = undefined; alert(message == undefined); //true
对未初始化的变量执行typeof 操作符会返回undefined 值,而对未声明的变量执行typeof 操作符同样也会返回undefined 值。
var message; // 这个变量声明之后默认取得了undefined 值 // 下面这个变量并没有声明 // var age alert(typeof message); // "undefined" alert(typeof age); // "undefined"
3、null
null 值表示一个空对象指针,使用typeof 操作符检测null 值时会返回"object
var car = null; alert(typeof car); // "object"
4、Boolean
可以调用转型函数Boolean(),将一个值转换为其对应的Boolean 值。
var message = "Hello world!"; var messageAsBoolean = Boolean(message);
数据类型 |
转换为true的值 |
转换为false的值 |
Boolean |
true |
false |
String |
任何非空字符串 |
""(空字符串) |
Number |
任何非零数字值(包括无穷大) |
0和NaN |
Object |
任何对象 |
null |
Undefined |
n/a(不适用) |
undefined |
var message = "Hello world!"; if (message){ alert("Value is true"); }
5、number
可以用来表示十进制整数,如:
var intNum = 55; // 整数
可以用来表示八进制整数,八进制第一位必须是零(0),八进制数字序列(0~7),如果数值超过范围,前导零将被忽略,按照十进制解析,如:
var octalNum1 = 070; // 八进制的56 var octalNum2 = 079; // 无效的八进制数值——解析为79 var octalNum3 = 08; // 无效的八进制数值——解析为8
可以表示十六进制,前面两位必须是0x,后面跟任何十六进制数字(0~9及A~F),字母A~F可以大写也可以小写,如:
var hexNum1 = 0xA; // 十六进制的10 var hexNum2 = 0x1f; // 十六进制的31
在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。
(1)浮点数值
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。虽然小数点前面可以没有整数,但不推荐,如
var floatNum1 = 1.1; var floatNum2 = 0.1; var floatNum3 = .1; // 有效,但不推荐
对于那些极大或极小的数值,可以用e 表示法(即科学计数法)表示的浮点数值表示。
var floatNum = 3.125e7; // 等于31250000
(2)数值范围
ECMAScript 能够表示的最小数值保存在Number.MIN_VALUE 中——在大多数浏览器中,这个值是5e-324;
能够表示的最大数值保存在Number.MAX_VALUE 中——在大多数浏览器中,这个值是1.7976931348623157e+308。
超出JavaScript 数值范围的值,那么这个数值将被自动转换成特殊的Infinity 值。如果这个数值是负数,则会被转换成-Infinity(负无穷),如果这个数值是正数,则会被转换成Infinity(正无穷)。
(3)NaN
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
NaN 本身有两个非同寻常的特点:
- 任何涉及NaN 的操作(例如NaN/10)都会返回NaN;
- NaN 与任何值都不相等,包括NaN 本身。
isNaN()函数, 确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试
将这个值转换为数值。某些不是数值的值会直接转换为数值,如:
alert(isNaN(NaN)); //true alert(isNaN(10)); //false(10 是一个数值) alert(isNaN("10")); //false(可以被转换成数值10) alert(isNaN("blue")); //true(不能转换成数值) alert(isNaN(true)); //false(可以被转换成数值1)
(4)数值转换
Number()函数可以用于任何数据类型,parseInt()和parseFloat()专门用于把字符串转换成数值。
Number()函数的转换规则如下。
- 如果是Boolean 值,true 和false 将分别被转换为1 和0。
- 如果是数字值,只是简单的传入和返回。
- 如果是null 值,返回0。
- 如果是undefined,返回NaN。
- 如果是字符串,遵循下列规则:
- 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值
- 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值
- 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
- 如果字符串是空的(不包含任何字符),则将其转换为0
- 如果字符串中包含除上述格式之外的字符,则将其转换为NaN。
- 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
var num1 = Number("Hello world!"); //NaN var num2 = Number(""); //0 var num3 = Number("000011"); //11 var num4 = Number(true); //1
parseInt()函数的转换规则:
var num1 = parseInt("1234blue"); // 1234 var num2 = parseInt(""); // NaN var num3 = parseInt("0xA"); // 10(十六进制数) var num4 = parseInt(22.5); // 22 var num5 = parseInt("070"); // 56(八进制数) var num6 = parseInt("70"); // 70(十进制数) var num7 = parseInt("0xf"); // 15(十六进制数)
为了消除在使用parseInt()函数时可能导致分歧问题,转换时引入基数(即多少进制),如:
var num = parseInt("0xAF", 16); //175 //引入基数后,十六进制字符串前面可以不用带“0x” var num1 = parseInt("AF", 16); //175 var num2 = parseInt("AF"); //NaN var num1 = parseInt("10", 2); //2 (按二进制解析) var num2 = parseInt("10", 8); //8 (按八进制解析) var num3 = parseInt("10", 10); //10 (按十进制解析) var num4 = parseInt("10", 16); //16 (按十六进制解析)
parseFloat()函数转换规则:
var num1 = parseFloat("1234blue"); //1234 (整数) var num2 = parseFloat("0xA"); //0 var num3 = parseFloat("22.5"); //22.5 var num4 = parseFloat("22.34.5"); //22.34 var num5 = parseFloat("0908.5"); //908.5 var num6 = parseFloat("3.125e7"); //31250000
6、String
(1)字符字面量
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 空格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号('),在用单引号表示的字符串中使用。例如:'He said, \'hey.\'' |
\" | 双引号("),在用双引号表示的字符串中使用。例如:"He said, \"hey.\"" |
\xnn | 以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示"A" |
\unnnn | 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如,\u03a3表示希腊字符Σ |
任何字符串的长度都可以通过访问其length 属性取得.
var text = "This is the letter sigma: \u03a3."; alert(text.length); // 输出28
转换为字符串
var age = 11; var ageAsString = age.toString(); // 字符串"11" var found = true; var foundAsString = found.toString(); // 字符串"true"
多数情况下,调用toString()方法不必传递参数。但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。
var num = 10; alert(num.toString()); // "10" alert(num.toString(2)); // "1010" alert(num.toString(8)); // "12" alert(num.toString(10)); // "10" alert(num.toString(16)); // "a"
String()函数遵循下列转换规则:
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;
- 如果值是null,则返回"null";
- 如果值是undefined,则返回"undefined"。
var value1 = 10; var value2 = true; var value3 = null; var value4; alert(String(value1)); // "10" alert(String(value2)); // "true" alert(String(value3)); // "null" alert(String(value4)); // "undefined"
7、object
ECMAScript的对象就是一组数据和功能的集合。
创建格式:
var o = new Object();
var o = new Object; // 有效,但不推荐省略圆括号
Object的属性和方法:
- constructor:保存着用于创建当前对象的函数,对于前面的例子,构造函数(constructor)就是Object()。
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。
- isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。