4、数据类型
4.1:typeof操作符
- “undefined”——如果这个值未定义;
- “boolean”——如果这个值是布尔值;
- “string”——如果这个值是字符串;
- “number”——如果这个值是数值;
- “object”——如果这个值是对象或null;
- “function”——如果这个值是函数
var message="some string"
console.log(typeof message) //"string"
console.log(typeof(message)) //"string"
console.log(typeof 95) //"number"
//typeof操作符可以是变量,也可以是数值字面量
//typeof是一个操作符而不是函数
4.2:undefined类型:只有一个值,即特殊的undefined,在使用var声明变量但未对其加以初始化时,这个变量就是undefined
var message;
console.log(message==undefined) //true
//此案子只声明了变量,但未对其进行初始化
var message=undefined;
console.log(message==undefined) //true
结论:对未初始化和未声明的变量执行typeof操作符都返回了undefined值;
4.3、Null类型:Null类型是第二个只有一个值的数据类型,这个特殊的值是null,从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回object
var car = null;
console.log(typeof car); //object
4.4、Boolean类型:该类型只有两个字面值:true和false--》它们是区分大小写的True和False都不是boolean值,只是标识符;
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非零数字值(包含无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | n/a(not applicable)表示:不适用 | undefined |
4.5、Number类型(数值类型)
//4.5.1:浮点数值(所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须有一位数字)
var floatNum1=1.1;
var floatNum2=0.1;
var floatNum3=.1; //有效数值,但不推荐
var floatNum4=1.; //小数点后面没有数字——解析为1
var floatNum5=10.0; //整数——解析为10
//对于数字极大或极小的数值,可以用e表示法,用e表示法表示数值等于e前面的数值乘于10的指数次幂
//ECMAScript中e表示法,前面是一个数值(可以是整数也可以是浮点数),中间是一个大写或小谢的字母E,后面是10的幂中的指数,该幂值将用来与前面的数相乘。
var floatNum6=3.125e7; //等于3125000
//4.5.2:数值范围(由于内存的限制,ECMAScript并不能保存世界上所有的数值)
//如果某次计算返回了正或者负的Infinity值,那么该值将无法继续参与下一次的计算;
var result=Number.MAX_VALUE+Number.MAX_VALUE
console.log(isFinite(result));//false
//4.5.3:NaN:(即非数值是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况);
//特点一:任何涉及NaN的操作都会返回NaN;
//特点二:NaN与任何值值都不相等,包括NaN本身;
alert(NaN==NaN); //false
//定义了一个isNaN()函数,这个函数接受一个参数,该参数可以是任何类型;该函数在接收到一个值之后,会尝试将这个值转换为数值;
console.log(isNaN(NaN)); //true
console.log(isNaN(10)); //false(10是一个数值)
console.log(isNaN("10")); //false(可以转换成数值10)
console.log(isNaN("blue")); //true(不能转换成数值)
console.log(isNaN(true)); //false(可以被转换成数值1)
4.5.4:数值转换 Number()函数的转换规则如下:
- 如果是Boolean值,true和false将分别被转换为1和0;
- 如果是数字值,只是简单的传入和返回;
- 如果是null值,返回0;
- 如果是undefined,返回NaN;
- 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值,如果转转的结果是NaN,则调用toString()方法,然后再次依照前面的规则转换返回的字符串值;
- 如果是字符串,遵循下列规则:
- 如果字符串中包含数字(包括前面带正号或负号的情况下),则将其转换为十进制的数值,即“1”会变成1,“123”会变成123,而“011”会变成11;(忽略前导零)
- 如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值,(忽略前导零)
- 如果字符串中包含有效的十六进制格式,例如“0xf”,则将其转换为相同大小的十进制整数值;
- 如果字符串好似空的,则将其转换为0;
- 如果字符串中包含除上述职位的字符;则将其转换为NaN;
var num1=Number('Hello world!'); //NaN
var num2=Number(''); //0
var num3=Number('000011'); //11
var num4=Number(true); //1
//由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数;
var num11=parseInt('1234blue'); //1234
var num12=parseInt(''); //NaN
var num13=parseInt('0xA'); //10(十六进制数)
var num14=parseInt('22.5'); //22
var num15=parseInt('070'); //56(八进制数)
var num16=parseInt('70'); //70(十进制数)
var num17=parseInt('0xf'); //15(十六进制数)
var num21=parseInt('10',2); //2(按二进制解析)
var num22=parseInt('10',8); //8(按八进制解析)
var num23=parseInt('10',10); //10(按十进制解析)
var num24=parseInt('10',16); //16(按十六进制解析)
//与函数parseInt()和,parseFloat()区别之一。parseFloat()也是从第一个字符开始解析每个字符,而且也是一直解析道字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
//parseInt()和 parseFloat()区别之二;在于它终都会忽略前导的零,parseFloat()可以识别所有的浮点数值的格式,包括十进制整数格式
var num31=parseFloat('1234blue'); //1234(整数)
var num31=parseFloat('0xA'); //0
var num31=parseFloat('22.5'); //22.5
var num31=parseFloat('22.34.5'); //122.35
var num31=parseFloat('0908.5'); //908.5
var num31=parseFloat('3.125e7'); //31250000
4.5.6、String类型(用于表示又零个或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号""或单引号''表示。与PHP中的双引号和单引号会影响对字符串的解释方式不同,ECMAScript中的这两种语法形式没有啥区别,两个表示的字符串完成相同;)
字符字面量(String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或具有其他用途的字符) | |
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杆 |
\' | 单引号('),在用单引号表示的字符串中使用;例如:' 哈哈哈,\'测试。\' ' |
\" | 双引号(“”),在用双引号表示的字符串中使用:例如:" 哈哈哈,\"测试。\" " |
\xnn | 以十六进制代码nn表示的一个字符(其中n为0~F),例如:\x41 表示"A" |
\unnnn | 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F),例如:\u03a3表示希腊字母符∑ |
var text = "This is the letter sigma: \u03a3.";
console.log(text.length) //28
console.log(text) //This is the letter sigma: Σ.
//此例子中的变脸text有28个字符,其中6个字符长的转义序列表示1个字符
字符串的特点:ECMAScript中的字符串是不可变的,字符串一旦创建,它们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量;
var lang = "Java";
lang = lang + "Script";
console.log(lang) //JavaScript
转换为字符串:要把一个值转换为一个字符串有两方式,
- 使用toString()方法,这个方法唯一要做的就是返回相对应值的字符串表示;
- 使用String()方法,这个函数能够将任何类型的值转换为字符串(String函数遵循下列转换规则)
- 如果有toString()方法,则调用该方法(没有参数)并返回相应的结果;
- 如果值是null,则返回"null";
- 如果值是undefined,则返回"undefined";
/************* toStrinng()方法 ****************************/ var age=11; var ageAsString=age.toString(); alert(ageAsString) //字符串‘11’ var found=true; var foundAsString=found.toString(); alert(foundAsString) //字符串‘true’ //数值、布尔值、对象和字符串值都有toString()方法。但是null和undefined值没有这个方法; //多数情况下,调用toString()方法不必传递参数, /*调用数值的toString()方法时,可以传递一个参数:输出数值的基数;默认情况下,toString()方法以十进制格式返回数值的字符串表示。而通过传递基数,toString()可以输出以二进制、八进制、十六进制,乃至其他任意有效进制格式表示字符串值。*/ var num=10; console.log(num.toString()); //10 console.log(num.toString(2)); //1010 console.log(num.toString(8)); //12 console.log(num.toString(10)); //10 console.log(num.toString(16)); //a /************* Strinng()函数 ****************************/ var value=10; var value2=true; var value3=null; var value4; console.log(String(value)); //‘10’ console.log(String(value2)); //‘ture’ console.log(String(value3)); //‘null’ console.log(String(value4)); //‘undefined’
4.5.7:Object类型(ECMAScript中的对象就是一组数据和功能的集合);对象可以通过执行new操作符后跟要创建的对象类型的名称来创建,而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象;
var o = new Object();
//在ECMAScript中,如果不给构造函数传递函数,则可以省略后面的那一对括号
var o = new Object; //有效,但不推荐使用
重要思想:Object类型是所有它的实例的基础;换句话说:Object类型所具有的任何属性和方法也同样存在于更具体的对象中;Object的每个实例都具有下列属性和方法;
- constructor:保存着用于创建当前对象的函数,对于前面例子而言,构造函数(constructor)就是Object();
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在,其中,作为参数的属性名(peopertyName)必须以字符串形式制定,例如:o.hasOwnProperty("name");
- isPrototypeOf(object);用于检查传入的对象是否是当前对象的原型;
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举,与hasOwnProperry()方法一样,作为参数的属性名必须以字符串形式指定。
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应;
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同;