js数据类型

ECMAScript有五种数据类型简单数据类型Undefined,Null,Boolean,Number,String,还有一种复杂数据类型Object(Object由一组无序的名值对组成)。

typeof操作符
typeof是操作符而不是函数,用来检测给定变量的数据类型。
var str1 = "abc";
document.write(typeof(str1));//string
document.write(typeof str1);//string
document.write(typeof 6);//number

undefined类型:

只有一个值undefined。变量已声明,未进行初始化赋值;

没必要显示初始化变量为undefined,因为未初始化的值默认会取得undefined;

undefined类型的值恒相等(===)

变量未声明或未初始化,typeof都返回undefined。建议显示初始化变量,当typeof操作符返回undefined值时,我们才能知道变量是没声明,而不是没初始化;

var str1;
document.write(str1);//undefined
document.write(typeof str1);//undefined
document.write(typeof str);//undefined
var str2 = undefined;
document.write(str2);//undefined
document.write(str1 == undefined);//true
document.write(str1 == str2);//true
document.write((str1 == str2) + "<br>");//true
document.write((str1 === str2) + "<br>");//true,undefined类型只有一个值,所以恒等于
document.write(str1 == str2 + "<br>");//false,比较的时候注意用括号括起来改变优先级

Null类型:

只有一个值null。null值表示一个空对象指针。typeof操作符检测null值会返回object。

null和undefined之间的操作符相等(==)总是返回true。这是相等操作符处于比较的目的转换了操作数;后面补充。

null恒等于(===)undefined返回false;

变量的值没必要显示设置为undefined;但想要保存对象的变量还没有真正保存对象时就应该明确让变量保存null。

var str;
var str1 = null;
document.write(str1);//null
document.write(typeof str1);//object
document.write(str);//undefined
document.write(str == str1);//true
document.write(str === str1);//false

Boolean类型:

有两个字面值true和false,其他大小写方式TRUE,FALSE,True和False都不是Boolean值。

ECMAScript中所有类型的值都有与Boolean值true和false等价的值。

操作数是一个对象,返回true;

操作数是空字符串,返回false;

操作数是非空字符串,返回true;

操作数是0,返回false;

操作数非0(包括Infinity),返回true;

操作数是undefined,返回false;

操作数是null,返回false;

操作数是NaN,返回false;

var obj = new Object();
if(obj){
  document.write("操作数是一个对象,返回true");
}

var str1 = '';
if(str1){//没执行,说明:空字符串转为false
  document.write("空字符串转为false");
}

var str2 = 'abc';
if(str2){//
  document.write("非空字符串转为true");
}

var num1 = 0;
if(num1){//没执行,说明:操作数是0,转为false
  document.write("操作数是0,转为false");
}

var num2 = 2;
if(num2){
  document.write("操作数非0,转为true");
}

var num3 = Infinity;
if(num3){
  document.write("操作数为正负Infinity,转为true");
}

var str3 = undefined;
if(str3){//没执行,说明:操作数undefined,转为false
  document.write("操作数undefined转为false");
}

var obj1 = null;
if(obj1){//没执行,说明:操作数null转为false
  document.write("操作数null转为false");
}

var str4 = NaN;
if(str3){//没执行,说明:操作数NaN转为false
  document.write("操作数NaN转为false");
}

NaN,即非数值(Not a Number)。表示一个本来将要返回数值操作数却未返回数值的情况。

不会抛出异常。(其他变成语言中任何数除以0都会导致错误,从而停止代码的执行。但ECMAScript中任何数除以0不会报错,不会影响到其他代码执行;

document.write(7/0);//Infinity
document.write(7%0);//NaN(求模才返回NaN)
if(7/0){
  document.write("任何数除以0返回Infinity,而Infinity会转换为true");
}else{
  document.write(7/0);
}

任何涉及与NaN的运算操作都返回NaN;与字符串拼接就被视为字符串

document.write(NaN + 3);//NaN
document.write(NaN - 3);//NaN
document.write(NaN * 3);//NaN
document.write(NaN / 3);//NaN
document.write(NaN % 3);//NaN
document.write(3 / NaN);//NaN
document.write(3 % NaN);//NaN
document.write(NaN * 0);//NaN
document.write(NaN / 0);//NaN
document.write(NaN % 0);//NaN
document.write(0 / NaN);//NaN
document.write(0 % NaN);//NaN
document.write(NaN + "abc");//NaNabc

NaN与任何值都不相等,包括它本身。

alert(NaN == NaN);//false
isNaN()函数用来判断参数是否“不是数值”。参数会尝试转换为数值;字符串无法转换成数值,返回true;
document.write(isNaN(NaN));//true
document.write(isNaN(10));//false
document.write(isNaN("10"));//false
document.write(isNaN("10day"));//true(没法将字符串前段的数值转数值,整体是字符串)
document.write(isNaN("film"));//true
document.write(isNaN(true));//false

0除以任何数,返回0;

0对任何数求模,返回0;

0和0相除、求模,返回NaN;

任何数除以0,返回Infinity;

任何数对0求模,返回NaN;

document.write(0 / 3);//0
document.write(0 % 3);//0
document.write(0 / Infinity);//0
document.write(0 % Infinity);//0
document.write(0 / 0);//NaN
document.write(0 % 0);//NaN
document.write(3 / 0);//Infinity
document.write(Infinity / 0);//Infinity
document.write(3 % 0);//NaN
document.write(Infinity % 0);//NaN

Infinity操作,一般都返回Infinity,记住几个返回NaN的特例

document.write(Infinity + 3);//Infinity
document.write(Infinity + Infinity);//Infinity
document.write(-Infinity - Infinity);//-Infinity
document.write(Infinity * 3);//Infinity
document.write(Infinity * -3);//-Infinity
document.write(Infinity * Infinity);//Infinity
document.write(Infinity * -Infinity);//-Infinity
document.write(-Infinity * -Infinity);//Infinity
document.write(Infinity / 3);//Infinity
document.write(Infinity / -3);//-Infinity
document.write(Infinity % 3);//NaN
document.write(Infinity * 0);//NaN
document.write(Infinity - Infinity);//NaN
document.write(Infinity / Infinity);//NaN
document.write(Infinity / -Infinity);//NaN
document.write(-Infinity / -Infinity);//NaN
document.write(3 / Infinity);//0
document.write(3 % Infinity);//3

Number、String、Object、function都会在单独的文章中讲到这里就不再赘述了。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值