目录
JS是弱类型语言,意义相同的另一种说法是:ESMAScript的变量是松散类型的。
ECMAScript有5种简单数据类型 + 1种复杂数据类型
JS是弱类型语言,意义相同的另一种说法是:ESMAScript的变量是松散类型的。
-
弱类型语言是相对于强类型语言而言的(比如JAVA)。本质区别在于当声明变量时强类型语言会指定这个变量的数据类型,如果后面再给这个变量赋其他数据类型的变量就会出错;相对的,弱类型语言(或者说松散类型)的变量可以用来保存任何类型的数据。
// eg. var a = ‘lalala’; a = 10; // 有效,但不建议
ECMAScript有5种简单数据类型 + 1种复杂数据类型
-
简单数据类型:String、Number、Boolean、Null、Undefined
-
复杂数据类型:Object
typeof 检测数据类型
-
由于松散类型的特点,JS就需要一种可靠手段来检测变量的数据类型;
-
typeof是操作符,不是函数,可以加括号也可不加;
-
typeof操作符可以返回6种结果:
-
“string”
-
“number"
-
“boolean"
-
“undefined"
-
“object"
-
“function"
-
typeof null 返回 “object”,null被看作一个空的对象
-
函数在ECMAScript中也是对象而不是一种单独的数据类型,但function在应用中确实又不同于一般对象,就可以用typeof进行区分
Undefined
-
Undefined是一个数据类型,只有一个特殊值:undefined
-
当使用var声明了变量却没有对它初始化,此时该变量的值默认就是undefined:
var a; console.log(a === undefined); //true
-
虽然声明不初始化的变量默认值是undefined,但仍和不声明是有区别的:
var a; alert(a); // undefined alert(b); // 错误(b is not defined)
-
有趣的是不管变量是否已经声明,使用typeof操作符判断的结果都是undefined,这在逻辑上是合理的:
var a; typeof a; //undefined typeof b; //undefined
Null
-
与Undefined一样,Null也是只有一个特殊值:null 的数据类型;
-
null表示一个指向空对象的指针,所以typeof null才会返回“object”;
-
undefined派生自null:
alert(null == undefined); //true
-
有一个好习惯:如果要定义一个变量用于未来存放对象,最好初始化为null(如var man = null),这样当需要判断该变量是否已经存放了对象就可以使用man != null来判断;
Boolean
-
Boolean类型只有两个值:true || false,注意:由于JS的大小写敏感,所以True、False或其他true和false带大写字母的任意组合都不是Boolean类型的值,而只是普通标识符;
-
其他数据类型均可以转换成Boolean类型参与判断、逻辑运算,转换方法有:
-
-
Boolean( ),参数可以是任意数据类型;
-
!!,利用逻辑非运算符对数据类型的隐式转换,两次使用即可达到与Boolean函数相同的效果;
-
-
不同数据类型的值转换成Boolean类型得到的结果:
-
-
Boolean:
-
-
true: true
-
false: false
-
-
Number:
-
-
任意非零数字(包括正负∞):true
-
0或NaN:false
-
-
String:
-
-
任意非空字符串:true
-
空字符串:false
-
-
Object:
-
-
任何对象:true
-
null:false
-
-
Undefined:
-
-
undefined:false
-
-
Number
Number类型值得研究的点比较多,单拎一篇文章来讲,点击这句话跳转
String与Object
且听下回分解