JavaScript_笔记4 数据类型(Undefined,Null,Boolean,Number,String,Object)
JavaScript六种数据类型
- ECMAScript的变量(Var操作符)
- ECMAScript的数据类型
- typeof操作符
- 类型①—Undefined类型
- 类型②—Null类型
- 类型③—Boolean类型
- 类型④—Number类型
- 1.永远不要测试某个特定的浮点数值
- 2.正无穷Infinity & 负无穷-Infinity
- 3.NaN(Not a Number)
ECMAScript的变量(Var操作符)
红宝书中讲到:ECMAScript的变量都是松散类型的。松散类型即可以用来保存任何类型的数据。也就是说,每个变量仅是一个用于保存值的占位符。
首先,如何用var定义/初始化一个变量:
var message; // 定义了名叫message的变量,但未初始化
var message = 'hello'; // 定义了名叫message的变量,并保存了字符串'hello'
其次,var操作符定义的变量是局部变量
<script>function test() {var message = 'hi';}test(); //调用函数,创建变量message并赋值alert(message); //超出了message的作用域,出错//message相当于未声明的变量,只能执行typeof操作
</script>
总结:
- var可以定义一个变量,该变量可以保存任何值,只是一个用于保存值的占位符;
- 不初始化的话,该变量将保存一个为undefined的值;
- 对变量初始化,该变量将保存一个特定的值,但不会因为是某个值就将其标记为某某类型。(如var message=‘hello’;并不会因为message保存了字符串值‘hello’,message就被标记成字符串类型)
- 初始化变量的过程,可以理解作:只是给一个变量赋值;
- var操作符定义的变量是局部变量。
ECMAScript的数据类型
ECMAScript 有5种简单数据类型(基本数据类型),即为:Undefined、Null、Boolean、Number和String;有一种复杂数据类型,Object。
typeof操作符
typeof操作符会返回以下某个字符串:
- undefined (若未定义或未初始化)
- boolean (若变量的值是布尔值)
- string (若变量的值是字符串)
- number (若变量的值是数值)
- object (若变量的值是对象或null)
- function (若变量的值是函数)
验证返回undefined的情况
1.1未初始化的情况
test函数中定义了变量message,但未初始化;
<script>function test() {var message;// var message = 'hello';// var message = true;// var message = 100;// var message = window;// var message = null;alert(typeof message);}test();// var message = test;// alert(typeof message);</script>
未初始化,则返回字符串undefined。前文说过:定义一个变量,但不初始化的话,该变量保存一个特殊的值undefined;
1.2未定义的情况
函数test执行后,var操作符定义了变量message,并对它初始化,保存字符串值‘hello’。
<script>function test() {// var message;var message = 'hello';// var message = true;// var message = 100;// var message = window;// var message = null;// alert(typeof message);}test();// var message = test;alert(typeof message);</script>
同样也会是undefined。既可以说明var操作符定义的变量是局部变量,也可以说明未定义的变量,使用typeof将返回字符串undefined;
还有一点:未声明的变量只能执行typeof操作
剩下的可以自己动手佐证;
另外特别说明:null是空对象指针,所以typeof返回的是字符串’object’。将在下文进一步阐述。
类型①—Undefined类型
Undefined类型只有一个值——undefined。
若用var操作符声明一个变量,未对其初始化的话,该变量保存的值就是undefined。
var age ;alert(age); // 分别执行,age未初始化保存的值是undefinedalert(age == undefined); // 分别执行,返回 truealert(typeof age) // 返回字符串'undefined'
alert(age); // 分别执行,出错alert(age == undefined); // 分别执行,出错alert(typeof age); // 分别执行,返回字符串'undefined'
总结:
- var声明但未初始化的变量,将保存值为undefined;
- 声明但未初始化的变量,typeof将返回字符串’undefined‘;
- 未声明的变量,只能执行typeof操作;
- 未声明的变量,执行typeof操作也是返回字符串’undefined‘;
类型②—Null类型
Null类型只保存一个特殊的值,null;
null值有两个特点:
- 对null值执行typeof将返回’object’,因为null是空对象指针
- null == undefined ,将返回true
只要意在保存对象的变量还没有真正地保存对象,就有必要明确地让该变量保存null值。
类型③—Boolean类型
Boolean类型小结:
- Boolean类型有两个字面值,true和false。
- 此字面值是区分大小写的,例如True和False都不是Boolean的值。
- ECMAScript所有类型的值都有与Boolean值等价的值,即可以用转型函数Boolean()去转化。
对任何数据类型的值使用Boolean()函数,都会返回一个Boolean值。至于这个Boolean值是true还是false,取决于该值的数据类型及其实际的值。下面是转型函数Boolean()的转换规则:
- Undefined类型,值只为undefined,转换为false
- Boolean类型,值为true则转换为true,值为false转换为false
- Number类型,值为任何非零数字值转为true,NaN和0转为false
- String类型,值为任何非空字符串转为true,空字符串转为false
- Object类型,值为任何对象转为true,值为null转为false
因此,有个易混淆的说法,true一定是1,false一定是0。其实不对。
应该是,1一定是true,0一定是false;true不一定是1,false也不一定是0;
类型④—Number类型
1.永远不要测试某个特定的浮点数值
ECMAScript的浮点数值最高精度是17位小数,但在进行算数计算时,其精确度远远不如整数。
例如:0.1+0.2的结果并不是0.3,是0.30000000000000004。所以永远没法通过测试
if(a+b==0.3){alert('the result is 0.3')
}
永远不要测试某个特定的浮点数值,因为你不知道是多小的舍入误差导致结果有偏差。
2.正无穷Infinity & 负无穷-Infinity
若某次计算的结果得到一个超出数值范围的值,这个数值会自动转为特殊的Infinity值。若是负数,则转为-Infinity(负无穷);若是正数,则转为Infinity(正无穷)。
- Infinity和-Inifinity不是能够参与计算的数值
- 可以用isFinite()函数判断参数是否为有穷的。如果参数在最小和最大数值之间,isFinite()将返回true,否则返回false
3.NaN(Not a Number)
NaN非数值,是一个特殊的数值。用于表示一个本来要返回数值的操作数但却没有返回数值的情况,这样就可以不用抛出错误。
如,在其它语言中,任何数值除以非数值会出现错误。但在ECMAScript中,它会返回NaN,而不是抛出错误。
alert(NaN/10); //NaN
alert(NaN==0); //false
alert(NaN==NaN);//false
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false 10是数值
alert(isNaN('10')); //false 可以转成数值
alert(isNaN(true)); //false 可以转成数值
alert(isNaN('blue')); //true 不可以转成数值
对NaN进行总结:
- 任何涉及到NaN的操作都是返回NaN
- NaN与任何数值都不等,包括NaN自身
- typeof NaN //返回 ‘number’
- isNaN()函数可以判断参数是否“不是数值”。该函数可以接受任何类型的参数。先尝试能否转换为数值,可以的话就返回false,不可以就返回true,表面是NaN。
JavaScript_笔记4 数据类型(Undefined,Null,Boolean,Number,String,Object)
JavaScript六种数据类型
- ECMAScript的变量(Var操作符)
- ECMAScript的数据类型
- typeof操作符
- 类型①—Undefined类型
- 类型②—Null类型
- 类型③—Boolean类型
- 类型④—Number类型
- 1.永远不要测试某个特定的浮点数值
- 2.正无穷Infinity & 负无穷-Infinity
- 3.NaN(Not a Number)
ECMAScript的变量(Var操作符)
红宝书中讲到:ECMAScript的变量都是松散类型的。松散类型即可以用来保存任何类型的数据。也就是说,每个变量仅是一个用于保存值的占位符。
首先,如何用var定义/初始化一个变量:
var message; // 定义了名叫message的变量,但未初始化
var message = 'hello'; // 定义了名叫message的变量,并保存了字符串'hello'
其次,var操作符定义的变量是局部变量
<script>function test() {var message = 'hi';}test(); //调用函数,创建变量message并赋值alert(message); //超出了message的作用域,出错//message相当于未声明的变量,只能执行typeof操作
</script>
总结:
- var可以定义一个变量,该变量可以保存任何值,只是一个用于保存值的占位符;
- 不初始化的话,该变量将保存一个为undefined的值;
- 对变量初始化,该变量将保存一个特定的值,但不会因为是某个值就将其标记为某某类型。(如var message=‘hello’;并不会因为message保存了字符串值‘hello’,message就被标记成字符串类型)
- 初始化变量的过程,可以理解作:只是给一个变量赋值;
- var操作符定义的变量是局部变量。
ECMAScript的数据类型
ECMAScript 有5种简单数据类型(基本数据类型),即为:Undefined、Null、Boolean、Number和String;有一种复杂数据类型,Object。
typeof操作符
typeof操作符会返回以下某个字符串:
- undefined (若未定义或未初始化)
- boolean (若变量的值是布尔值)
- string (若变量的值是字符串)
- number (若变量的值是数值)
- object (若变量的值是对象或null)
- function (若变量的值是函数)
验证返回undefined的情况
1.1未初始化的情况
test函数中定义了变量message,但未初始化;
<script>function test() {var message;// var message = 'hello';// var message = true;// var message = 100;// var message = window;// var message = null;alert(typeof message);}test();// var message = test;// alert(typeof message);</script>
未初始化,则返回字符串undefined。前文说过:定义一个变量,但不初始化的话,该变量保存一个特殊的值undefined;
1.2未定义的情况
函数test执行后,var操作符定义了变量message,并对它初始化,保存字符串值‘hello’。
<script>function test() {// var message;var message = 'hello';// var message = true;// var message = 100;// var message = window;// var message = null;// alert(typeof message);}test();// var message = test;alert(typeof message);</script>
同样也会是undefined。既可以说明var操作符定义的变量是局部变量,也可以说明未定义的变量,使用typeof将返回字符串undefined;
还有一点:未声明的变量只能执行typeof操作
剩下的可以自己动手佐证;
另外特别说明:null是空对象指针,所以typeof返回的是字符串’object’。将在下文进一步阐述。
类型①—Undefined类型
Undefined类型只有一个值——undefined。
若用var操作符声明一个变量,未对其初始化的话,该变量保存的值就是undefined。
var age ;alert(age); // 分别执行,age未初始化保存的值是undefinedalert(age == undefined); // 分别执行,返回 truealert(typeof age) // 返回字符串'undefined'
alert(age); // 分别执行,出错alert(age == undefined); // 分别执行,出错alert(typeof age); // 分别执行,返回字符串'undefined'
总结:
- var声明但未初始化的变量,将保存值为undefined;
- 声明但未初始化的变量,typeof将返回字符串’undefined‘;
- 未声明的变量,只能执行typeof操作;
- 未声明的变量,执行typeof操作也是返回字符串’undefined‘;
类型②—Null类型
Null类型只保存一个特殊的值,null;
null值有两个特点:
- 对null值执行typeof将返回’object’,因为null是空对象指针
- null == undefined ,将返回true
只要意在保存对象的变量还没有真正地保存对象,就有必要明确地让该变量保存null值。
类型③—Boolean类型
Boolean类型小结:
- Boolean类型有两个字面值,true和false。
- 此字面值是区分大小写的,例如True和False都不是Boolean的值。
- ECMAScript所有类型的值都有与Boolean值等价的值,即可以用转型函数Boolean()去转化。
对任何数据类型的值使用Boolean()函数,都会返回一个Boolean值。至于这个Boolean值是true还是false,取决于该值的数据类型及其实际的值。下面是转型函数Boolean()的转换规则:
- Undefined类型,值只为undefined,转换为false
- Boolean类型,值为true则转换为true,值为false转换为false
- Number类型,值为任何非零数字值转为true,NaN和0转为false
- String类型,值为任何非空字符串转为true,空字符串转为false
- Object类型,值为任何对象转为true,值为null转为false
因此,有个易混淆的说法,true一定是1,false一定是0。其实不对。
应该是,1一定是true,0一定是false;true不一定是1,false也不一定是0;
类型④—Number类型
1.永远不要测试某个特定的浮点数值
ECMAScript的浮点数值最高精度是17位小数,但在进行算数计算时,其精确度远远不如整数。
例如:0.1+0.2的结果并不是0.3,是0.30000000000000004。所以永远没法通过测试
if(a+b==0.3){alert('the result is 0.3')
}
永远不要测试某个特定的浮点数值,因为你不知道是多小的舍入误差导致结果有偏差。
2.正无穷Infinity & 负无穷-Infinity
若某次计算的结果得到一个超出数值范围的值,这个数值会自动转为特殊的Infinity值。若是负数,则转为-Infinity(负无穷);若是正数,则转为Infinity(正无穷)。
- Infinity和-Inifinity不是能够参与计算的数值
- 可以用isFinite()函数判断参数是否为有穷的。如果参数在最小和最大数值之间,isFinite()将返回true,否则返回false
3.NaN(Not a Number)
NaN非数值,是一个特殊的数值。用于表示一个本来要返回数值的操作数但却没有返回数值的情况,这样就可以不用抛出错误。
如,在其它语言中,任何数值除以非数值会出现错误。但在ECMAScript中,它会返回NaN,而不是抛出错误。
alert(NaN/10); //NaN
alert(NaN==0); //false
alert(NaN==NaN);//false
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false 10是数值
alert(isNaN('10')); //false 可以转成数值
alert(isNaN(true)); //false 可以转成数值
alert(isNaN('blue')); //true 不可以转成数值
对NaN进行总结:
- 任何涉及到NaN的操作都是返回NaN
- NaN与任何数值都不等,包括NaN自身
- typeof NaN //返回 ‘number’
- isNaN()函数可以判断参数是否“不是数值”。该函数可以接受任何类型的参数。先尝试能否转换为数值,可以的话就返回false,不可以就返回true,表面是NaN。