本文在书写过程中,参考了一些资料,并进行了来源标注。如果原作者觉得不合适,可以联系删除。
另作者为初学者,欢迎各位前辈批评指正。
在ES6之前,JavaScript有五种基本数据类型
(包括Number,String,Boolean,Null和Undefined)和对象类型
(包括Array,Object,Function,Math,Date等)。
Number
的意思是“数字”,其实js对于number并没有区分,但为了理解,参考其他编程语言,将其分为整型和浮点型,也就是数学中的整数和小数。
Js中,整数的数字有3中常见的表示方式:
十进制表示
每个数是0-9之间的数字
八进制表示
每个数都是0-7之间的数字,以0,0o,0O开头。
十六进制表示
每个数都是0-9,A-F之间的符号,以0x或者0X开头。
var num1 = 024; // 2 * 8 + 4 = 20
var num2 = 079; // 79
var num3 = 0x3f; // 3*16 +15 = 63
浮点数不区分进制。
js中,数值是有一定的范围的,如果超过范围,会表示为 Infinity
(正无穷) 或者 -Infinity
。
NaN
表示Not a Number,也就是不是一个数值,常用来表示得不到值,比如0 / 0得到的就是NaN.
特点:
与其他编程语言不同,js定义字符串可以使用单引号
,也可以使用双引号
。单引号和双引号没有任何区别。但需要注意的是,单引号不能嵌套单引号;双引号不能嵌套双引号。如果非要嵌套,可以对引号进行转义。
var a = "hello";
var b = 'hello';
var sayings = "It's really cool."
var responses = 'That\'s right!'
比如上面的例子,当要在单引号的字符串中间使用单引号这样特殊功能的符号,就需要使用转义字符\
来表示。
\n 换行符
\t 水平制表符 Tab
\r 回车符
\' 对单引号进行转义
\" 对双引号进行转义
\\ 对转义符本身进行转义
\uxxxx Unicode 编码
+
既可以作为数字运算的加号,也可以作为字符串连接符,将字符串连在一起。
var sayings = "That's cool."
var responses = 'That\'s right!'
var words = sayings + ' '+ responses
console.log(words)
Boolean字面量,只有true
和false
两个字面量的值,必须是小写字母。在计算机内部存储中,true为1,false为0
null
本身是一个数据,表示一个空对象指针。
如果定义的变量准备在将来用于保存对象,最好将该变量初始化为null。
undefined
本身是一个数据,表示未定义。
变量只声明的时候值默认是undefined。
使用typeof
的方法进行数据类型的检测。
检测方式:在typeof后面加小括号()执行,将要检测的数据放在小括号内部。(这里的typeof是函数)
// number
console.log(typeof(2));
console.log(typeof(2.4));
console.log(typeof(Infinity));
console.log(typeof(NaN));
// string
console.log(typeof("字符串"));
// undefined
console.log(typeof(undefined));
// boolean
console.log(typeof(true));
console.log(typeof(false));
// object
console.log(typeof(null));
也可以将typeof作为关键字,后面加空格,空格后添加数据的方式,检测数据(这里的typeof是运算符)
// number
console.log(typeof 67);
JavaScript语言是一门动态类型的语言,变量并没有一个单独的数据类型,而是会随着内部存储数据的变化,数据类型也会发生变化。所以变量的数据类型,与内部存储数据有关。
// 定义变量
var a = 1;
console.log(typeof(a));
// 第二次赋值
a = true;
console.log(typeof(a));
tips: 在谷歌浏览器控制台,字符串的颜色是黑色的,数值类型是蓝色的,布尔类型也是蓝色的,undefined和null是灰色的。
这里推荐书籍:《JavaScript重难点实例精讲》,下面的内容参考书中内容总结。
Number()方法:将任何数据类型转为数字
Number(10); // 10
Number(010); // 8
Number(0x10); // 16
Number(true); // 1
Number(false); // 0
Number(null); // 0
Number(undefined); // NaN
Number('21'); // 21
Number('021'); // 21
Number('0x12'); // 16 + 2 = 18
Number('0x21'); // 2*16 + 1 = 33
Number('123a'); // NaN
Number('abc'); // NaN
Number('abc'); // NaN
parseInt()方法
parseInt()函数用于解析一个字符串,并返回指定的基数对应的整数值。
parseInt(string,radix);
string表示要解析的值,如果不是一个字符串,会使用toString()函数将其转换成字符串,radix表示进制,不写则默认为10进制。
parseInt('0x12',16); // 1*16 + 2 = 18
parseInt(0x12,16); // 传入的是十六进制,转为十进制,为18,转成字符串18,将“18”转换为16进制,得到的结果为16+8 = 24
parseInt采用前置匹配
的原则。
从字符串的第一个字符开始匹配,如果处于基数指定的范围,保留并继续往后匹配满足条件的字符,知道遇见不满足基数指定的数据范围。
遇到的字符串以“0x"开头,如果以16进制处理,会转换为对应的数字,以10进制处理,直接返回0
传入的字符串涉及到算术运算,不运算。如果是算术运算表达式,先运算再得出结果。
对于包含e的不同数据的处理差异
对于浮点数的处理:直接忽略小数点及后面的数。
// 规则1
parseInt("fg123",16) // 15
// 规则2
parseInt('0x12',16) // 16+2 = 18
parseInt('0x12',10) // 0
// 规则3
parseInt(15*3, 10); // 45
parseInt('15*3',10); //15
// 规则4
parseInt(6e3,10); // 6000
parseInt(6e3,16); // 24576
parseInt('6e3',10); // 6
parseInt('6e3',10); // 6*16*16 + 14*16 + 3 = 1763
// 规则5
parseInt('6.99',10); // 6
上面的内容摘自推荐的书籍,侵删。
parseFloat()方法
浮点数没有进制,所以parseFloat
的作用是解析一个字符串,返回对应的浮点数。
parseFloat只解析,正负号,0-9的数字,科学计数法,小数点这些字符。
忽略空白
对于科学运算符e,会进行运算处理。
只匹配第一个小数点
parseFloat(' 1.2') // 1.2
parseFloat('4e3'); // 4000
parseFloat('11.2.1') // 11.2
此部分参考资料:铭哥教程
JavaScript 是弱类型语言,所以可以进行自动类型转换。
在运算环境下,数据自动转换类型:
自动类型转换的规则同强制类型转换的规则是一致的。
参考资料: 阮一峰:undefined和null的区别
注意:
两者数据类型不一样
使用==运算符判定时,null和undefined相等。
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
null表示"没有对象",即该处不应该有值。
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义
预告:下一篇文章:数组的相关操作。