原始类型
原始类型,又称原始值,是直接代表JavaScript语言实现的最底层数据。
原始类型分为 boolean类型、number类型、string类型三种。声明变量并初始化值为原始类型,一般称之为字面量方式定义变量,或直接量方式定义变量。number类型
number类型包括整数类型和浮点类型
- 整数类型:包括负整数、0、正整数。
- 浮点类型:表示包含小数部分。浮点类型所占的空间是整数类型的两倍。
var num1 = 0.1;console.log(num1);/* 浮点类型 - '.1'表示'0.1'的含义 -> 不推荐 */var num2 = .1;console.log(num2);var num3 = 10.1;console.log(num3);/* 浮点类型 - '.0'表示为整数 */var num4 = 10.0;console.log(num4);/* 浮点类型 - '.'表示为整数 */var num5 = 10.;console.log(num5);
浮点类型的计算误差
由于小数部分只能表示有限的个数,在四舍五入的过程中有可能出现误差。
/* number类型中的小数,在计算时可能出现误差 * 并不是所有的小数计算都出现误差 * 小数的计算时,注意结果是否出现误差 * 通过数字值的换算,将其转换成整数进行计算,再将结果换算为小数 */var x = 0.3;var y = 0.2;console.log(x - y);// 0.1
NaN
NaN(Not a Number),非数值,是一个特殊的数值。
- NaN与任和值都不相等,包括NaN本身
- 任何涉及NaN的操作都会返回NaN
var num = Number('化物语');//将string类型转换成number类型console.log(num)//NaN 这个值不是一个数字console.log(typeof num)//number 这是一个number类型
string类型
/** string类型的值用单引号或双引号包裹* 值的内容可以是所有字符* string类型 - 文本本身需要单引号或双引号时 1.如果需要的是双引号,字符串只能使用单引号 2.如果需要的是单引号,字符串只能使用双赢好*/var str1 = '化物语'console.log(str1)var str2 = "化物语"console.log(str2)
boolean类型
布尔类型是指真假、开关、是否,它的值只有ture和false
- ture和false都是小写
var boo = trueconsole.log(boo);//true
typeof运算符
由于JavaScritp是弱类型的,所以需要一种手段检测给定变量的数据类型。typeof就是用来检测数据类型
- typeof运算符判断原始类型的数据类型
var boo = true;var str = '化物语';console.log(typeof num);// numberconsole.log(typeof boo);// booleanconsole.log(typeof str);// stringvar result = typeof num;console.log(result);// numberconsole.log(typeof result);// string
包装类型
在JavaScript中是区分大小写的,写法上,原始类型全部小写,包装类型全部大写。
一般不建议用包装类型定义对应的数据类型,单包装类型提供了操作相应值的方法/* 通过包装类型创建一个数字值类型的变量 * var 变量名称 = new Number(数字值) * new Number() -> 创建了一个Number类型的对象 * 以下两种方式创建的数字值,在使用上没有任何区别 *//* 构造函数方式 */var num1 = new Number(100);console.log(num1);/* [Number: 100] *//* 字面量/直接量方式 */var num2 = 100;console.log(num2);/* 100 */console.log(typeof num2);// numberconsole.log(typeof num1);// object(对象)var str1 = new String('化物语');console.log(str1);var str2 = '化物语';console.log(str2);var boo1 = new Boolean(true);console.log(boo1);var boo2 = true;console.log(boo2);
instanceof运算符
相对于typeof运算符只能测试原始类型数据的类型,instanceof运算符可以判断包装类型(引用类型)
var str = new String('卧龙学苑');var num = new Number(100);var boo = new Boolean(true);// instanceof运算符用于判断引用类型(包装类型)console.log(str instanceof String);// true/* typeof运算符与instanceof运算符的区别 * typeof运算符 1.用于判断原始类型 2.语法结构不同 -> typeof 变量名称 3.得到结果不同 -> 原始类型的名称 * instanceof运算符 1.用于判断引用类型(包装类型) 2.语法结构不同 -> 变量名称 instanceof 引用类型名称 3.得到结果不同 -> 布尔类型的值(true或false) */
undefined
undefined表示空的数据类型,他只有一个值,就是undefined
* 如果一个变量的值等于undefined -> 变量是存在的,但没有值 * undefined类型中只存在一个值(undefined) 得到undefined值的情况如下: 1.定义变量时,只声明,而不初始化值 -> undefined 2.定义变量时,初始化值为 undefined -> undefined 注意 - 得到undefined值的情况不止以上两种 */var v;console.log(v);var c = undefined;console.log(c);console.log(typeof v);// undefined - 类型名称
null
表示一个不在质量任何内存空间地址的变量,多用于释放内存
null类型只存在一个值nullvar v = null;console.log(v);// null
类型转换
隐式类型装换
由于JavaScript是弱类型/松散类型的,在任何情况下都可以强制转换。
var num =100;var str ='化物语';var boo =true;//转换为number类型var result1 = +str;console.log(typeof result1);//numbervar result2 = +true;console.log(typeof result2);//number//转换为string类型var result3 = '' + numconsole.log(typeof result3)//stringvar result4 ='' + booconsole.log(typeof result4)//string//转换为boolean类型var result5 = !!numconsole.log(typeof result5)//booleanvar result6 = !!strconsole.log(typeof result6)//boolean
显示类型转换
// 定义number类型、string类型以及boolean类型的变量var num = 100;var str = '化物语';var str1 = '100';var str2 = '100.7'var boo = false;/* 1.转换为string类型 * String()函数 -> String(值) * toString()方法 -> 变量名.toString() * 对象的方法 -> 将变量当作是一个对象来使用 */var result1 = String(num);console.log(typeof result1);// stringvar result2 = num.toString();console.log(typeof result2);// string/* 2.转换为number类型 * Number()函数 -> Number(值) * parseInt()函数 -> parseInt(值) * 转换为number类型,转换为一个整数 * parseFloat()函数 -> parseFloat(值) * 转换为number类型,转换为一个浮点数 */var result3 = Number(boo);console.log(typeof result3);// numbervar result4 = parseInt(str1);console.log(typeof result4);// 100var result5 = parseFloat(str1);// 100console.log(result5);// 100var result6 = parseInt(str2);// 100.1console.log(result6);// 如果当前值为小数的话,parseInt()后取整数部分 - 100var result7 = parseFloat(str2);// 100.1console.log(result7);// 100.1/* 3.转换为boolean类型 * Boolean()函数 -> Boolean(值) */var result8 = Boolean(str);console.log(result8);// true