ECMAScript中有5种基础数据类型和一种复杂数据类型. 基础类型有:string , number, undefined, null, boolean. 复杂类型是:object
string 类型,值为字符串 ,js中使用双引号或单引号表示字符串
var str1='123';
var str2="abc123";
number类型,值为数字,js中number类型包括整形,浮点型和非数值
NaN即非数值,是number类型中的一个特殊值
NaN用于表示本来要返回一个数值的操作数,结果为返回数值的情况
比如(‘a’-1) (‘b’-2)
//number 数字类型:整数、小数、正数、负数、NaN
var num1=123;
var num2=123.45;
var num3=-123;
NaN(特殊的number类型)有两个特点:
1.任何涉及NAN的操作都会返回NAN
2.NAN与任何值都不相等,包括它本身
console.log(isNaN('123')) //false
console.log(isNaN('123a')) //true
可以判断是否为纯数字,若不为纯数字,返回true
规则:从前到后,解析,遇到非数字则停止,截取前面所有的数字
console.log(parseInt('123a')); //123
console.log(parseInt('a123')); //NaN
规则:从前到后,解析,遇到非数字,点号,则停止,截取前面所有的数字,浮点,若点号后面没有数字,则省略点号
console.log(parseFloat('123.23a')); //123.23
console.log(parseFloat('12a3.23')); //12
console.log(parseFloat('a123.23')); //NaN
console.log(parseFloat('123.a23')); //123
可以把Number四舍五入保留n位小数,返回字符串
var num=20;
console.log(num.toFixed(2)); //20.00
var num=20.2334;
console.log(num.toFixed(2)); //20.23
布尔类型,值为布尔值,boolean类型有2个值:true和false
undefined类型,表示值未定义,undefined类型只有一个特殊值为:undefined
var a;若不给初始值,则为undefined;
var a;
var b=undefined;
console.log(a); //undefined
console.log(b); //undefined
null类型,表示空,null类型只有一个特殊值为:null
如果变量准备在将来用于保存一个对象,那么该变量最好初始化为null
console.log(null == undefined); //true ECMA规定的
console.log(null === undefined); //false ECMA规定的
复杂数据类型:object类型,值为对象类型
js中, { }表示对象,[ ] 表示数组, function 表示函数,这些都是对象类型
var obj1=[1,2,3];
var obj2={
'name':'zhangsan'
};
var obj3=function(){};
//对象,数组,函数,都是对象类型
typeof操作符返回一个用来表示数据类型的字符串,注意typeof运算之后的结果都是字符串类型的
注意:typeof是一个操作符,不是一个函数!
typeof 运算符返回 变量(数据)的数据类型的字符串(6种)
var num=123;
var str="123";
var boo=true;
var und=undefined;
var arr=[];
var obj={};
var nul=null;
var fun=function(){};
console.log(typeof num); //"number"
console.log(typeof str); //"string"
console.log(typeof boo); //"boolean"
console.log(typeof und); //"undefined"
console.log(typeof arr); //"object"
console.log(typeof obj); //"object"
console.log(typeof nul); //"object"
console.log(typeof fun); //"function"
经常在面试中遇到typeof的题,可能觉得比较怪异,实际上,都是为了考察typeof的运用,但是无论如果都会只返回上面的6种情况
console.log(typeof null); //"object"
null表示一个空对象指针,typeof null值时会返回object的真正原理
console.log(typeof NaN); //"number"
console.log(typeof Infinity ); //"number"
NaN和Infinity都是number类型
console.log(typeof typeof typeof 1); //"string"
console.log(typeof (typeof 1)); //"string"
console.log(typeof Object); //function
Object是一个构造函数
面试中,经常会遇到这个问题,面试官会问null和undefined的区别是什么?其实这个问题回答起来,可深可浅.面试官想知道的是你对这两个原始数据类型的区别理解和使用场景
null和undefined都是javascript中的两种特殊的原始数据类型个,它们都只有一个值,对应null和undefined,这两种又有不同的语义和场景,又表现出相似的行为.
console.log(null == undefined); //true ECMA规定的
undefined值是派生自null的,ECMA-262规定 ==相等运算符测试相等性要返回true
console.log(null === undefined); //false ECMA规定的
严格相等符也就是全等,它俩是不相等的,因为全等符没有类型转换,undefined和null属于不同类型,所以===要返回false
undefined,字面的意思就是:未定义的值,表示缺少值,意思就是此处应该有一个值,但是还没有定义
undefined典型的用法是:
//变量声明了,但是没有赋值时,就是undefined
var a;
console.log(a);//undefined
//调用函数时,该提供的参数没有提供,该参数就等于undefined
function fn(a){
console.log(a);//undefined
}
fn();
//对象没有赋值的属性,该属性的值为undefined
var obj=new Object();
console.log(obj.a);//undefined
//函数没有返回值时,默认返回undefined
function fn(){
//实际上,这里return undefined;
}
console.log(fn());
//使用void表达式求值(ECMA规定,void操作符对任何表达式求值都是undefined)
console.log(void 0);//undefined
console.log(void false);//undefined
console.log(void []);//undefined
console.log(void null);//undefined
null表示一个空对象指针,这也就是当我们使用typeof null值时会返回object的真正原理
表示一个对象被人为的重置为空对象,而非一个变量最原始的状态
null的典型用法:
Foo.prototype = null
)undefined表示一个变量自然的,最原始的状态值,而null则表示一个变量被人为的设置为空对象,而不是最原始的状态,所以我们在使用过程中,一般我们是不需要显示把一个变量设置为undefined,因为对于未经初始化的值默认就会取undefined值,字面值的undefined主要用于比较 ,正式区分null和undefined(ECMA-262 第三版之前没有undefined这个值),第三版之后,引入这个值就是为了区分空对象指针和未经初始化变量的