我们知道JavaScript有ECMAScript、DOM、BOM三部分组成,下面一幅图可以简单明了的说明JavaScript的组成。
注:ECMAScript(European Computer Manufacturers Association)是由一种Ecma国际前身为欧洲计算机制造商协会制定的标准。简单来说,ECMAScript不是一门语言,而是一个标准。
ECMAScript中有5种简单数据类型,也称为基本数据类型:Undefined、Null、Boolean、String、Number。学习这些之前,需要先了解typeof操作符。
typeof的作用是判断给定数据的类型。具体用法见下面代码:
//1: typeof(直接量/变量)
console.log(typeof ("哈哈哈")); // string
console.log(typeof(13)); // number
// 2: typeof 直接量/变量
console.log(typeof "你好"); // string
console.log(typeof 23); // number
一、Undefined类型
Undefined类型只有一个值undefined,如果一个变量只有声明,没有赋值,那它的结果就是undefined,页面上不会报错。
对于尚未声明的对象,只能执行一项操作,即使用typeof操作符检测其数据类型。
<script type="text/javascript">
// 如果一个变量只有声明,没有赋值,那它的结果就是undefined,页面上不会报错
var a;
console.log(a); // undefined
console.log(typeof a); // undefined
var b
console.log(typeof b); // undefined
</script>
结果表明:对未初始化和未声明的变量执行typeof操作都返回了undefined值。
二、Null类型
Null类型:空对象,也是只有一个值:null。从逻辑角度讲,null值表示一个空对象指针,而这也正是使用typeof操作符检测其类型返回"object"的原因。undefined是派生自null,所以,它们相等性测试结果返回true。它有一个很常用的用处:如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null。
<script>
console.log(typeof null); // object
var a = null;
if (a) {
alert("true");
} else {
alert("false");
} // 返回false
if (null == undefined) {
console.log("undefined值是派生自null")
}
</script>
三、Boolean类型
Boolean类型有两个字面值,分别是true、false。虽然它只有两个值,但是任何类型都可以转换成Boolean,数据类型及其转换规则如下图:
总结出来即是:除了false、""、NAN、0、Undefined、Null转换为Boolean的时候结果是false,其余都是true。
四、String类型
1、String:即字符串,简单来说就是用引号引起来的文本,可以是单引号,也可以是双引号。字符串长度用length表示。ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它的值就不能改变,如果改变了字符串,编译不会出现问题,但是内存会出现问题,特别影响性能。
要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,例如:
var str = "12"; str = str + "ab";
2、字符字面量:String类型包含一些特殊的字符字面量,也叫转义字符,比如\n表示换行、\b表示退格、\表示斜杠、'表示单引号、''表示双引号等。如果字符串中,包含双字节字符,length属性可能不会精确地返回字符串中的字符数目。
3、如果字符串中出现引号:
- 如果字符串中出现双引号,可以把字符串的引号改成单引,反之,亦然
- 使用转义符
<script>
// 括号里面直接用的数据,叫做直接量
alert("123");
alert("1abv");
alert('你好');
// alert(abc); // 不是字符串,控制台会出现报错
alert("我说:“你好”"); //不会出错
// alert("you say:"today is a good day""); // 会报错,可以改成如下
alert('you say:"today is a good day"');
alert("you say: \n \'hello\ \"world\" \b \"你好\"");
</script>
五、Number类型
1、Number类型即是数值,分为浮点数值和整数数值,这里不再做过多说明,下面讲一下数值范围。
由于内存限制,ECMAScript并不能保存所有的数值类型,最小值保存在Number.MIN_VALUE,最大值保存Number_MAX_VALUE中,如果超过范围,会被自动转换成特殊的inFinity(正无穷)和-inFinity(负无穷)。可以用isFinite()函数来判断数值是否在最大值和最小值之间。
<script>
console.log(isFinite(123)); // true
var s = Number.MAX_VALUE + Number.MAX_VALUE;
console.log(isFinite(s)); // false
console.log(maxSum); // infinity(正无穷)
</script>
2、NaN
NaN(not a number)即非数值,是number的一种,用来表示数值的一种不正常的状态,一般情况下,会在数值计算错误的时候出现,它特殊到自己不等于自己。判断当前的数据是否是NaN的函数isNaN(),参数可以是任何数值,该函数可以帮确定这个参数是否“不是数值”,它在接到一个参数后,会尝试将这个值转换为数值,,函数返回false。某些不是数值的值会直接转换为数值,而不能被转换成数值的参数,会导致这个函数返回true。
<script>
console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false(10是一个数值)
console.log(isNaN("10")); // false(可以被转换成数值10)
console.log(isNaN(true)); // false (可以被转换常数值1)
console.log(isNaN(false)); // false(可以被转换成数值0)
console.log(isNaN("你好")); // true(不能被转换成数值)
</script>
六、String、Number使用注意
- 如果两个字符串用+相连,那加号的作用是连接这两个字符串
- 如果两个数值用+相连,那么加号的作用是两个数值相加
- 如果加号连接的两个直接量中有一个是字符串,那么作用就是连接
<script>
console.log("我+sayHi"); // 我+nihai
console.log("我"+"sayHi"); // 我nihai
var a = 123;
var b = "123";
console.log(a + a + a + b); // string "369123"
console.log(b + a + a + a); // string "123123123123"
</script>