js数据类型以及"==","==="运算符、if()语句
2015-01-07 18:25
525 查看
JavaScript是弱类型语言(动态类型),即一个变量可以引用任意类型数据,造成了方便开发的同时也多了一些需要考量的东西,尤其涉及不同类型数据的处理。
以下为js数据类型:
字符串('aa',"aaa")、
数字(123,123.00,1.23e2)、
布尔(true,false)、
数组(['a','b','c'])、
对象({firstname:"Bill","lastname":"Gates",age:18})、
Null(null:不存在的对象,如getElementById("xxx"))、
Undefined(undefined:未赋值变量或对象的未声明属性)
document.writeln(typeof 1);//number
document.writeln(typeof NaN);//number
document.writeln(typeof "aa");//string
document.writeln(typeof true);//boolean
document.writeln(typeof [1,2]);//object
document.writeln(typeof {a:1,b:2});//object
document.writeln(typeof null);//object
document.writeln(typeof undefined);//undefined
所以数组也是对象,对象类型变量存储引用,而字符串、数字、布尔为基本类型存储值
再来看看数据的比较:
"==="运算符,表示绝对的相等(类型和内容):
比如:
1 === 1;//true
1==="1";//false 类型不同
"aa" === "bb";//false
true === false; //false
需要注意:
null === null;//true
undefined === undefined;//true
null === undefined;//false
对象类型比较除非引用为同一对象,否则即使两个对象内容相同也为false
"=="运算符,不严格匹配,两个比较对象类型相同时,结果同"===",类型不同时,根据以下规则判断:
1、当存在boolean类型,true转换为1,false转换为0进行比较;
2、当存在string时,字符串为数字且和另一边数值相等为true,其他为false;
3、对象类型和基本类型的比较(待补充。)
4、null == undefined;//true
5、NaN不与任何值相等,包括本身
例如:
number,string比较:
1 == "1";//true
1 == "true";//false
0 == "false";//false
number,boolean比较:
1 == true //true
0 == false //true
2 == true;//false
2 == false;//false
string,boolean比较:
"true" == true;//false
"false" == false;//false
然后是关于if语句的判定,[b]由于js的if语句里允许非boolean值出现,所以需要注意if(a) 和 if(a == true)的写法不仅仅是简洁问题,结论也可能不一样:[/b]
[b]首先,下面这个语法[/b]
if(a){
alert(true);
}else{
alert(false);
}
当(注意此处均为赋值语句):
1、a为string类型时:a = "" (即空字符串)时执行false,其他执行true
2、a为number类型时:a = 0 或 a = NaN 时执行false,其他执行true
3、a = [](空数组) 或 a = {}(空对象) 执行true
4、a=undefined或a=null:执行false
于是,就可以看出if(a) 和 if(a == true)的区别:
1、a为boolean值时,结果相同
2、a为string:
a = "true",分别执行true,false
a = "false",分别执行true,false
a = "0",分别执行true,false
a = "1",分别执行true,true
a = "2",分别执行true,false
3、a为number:
a = 2,分别执行true,false
a = 1,分别执行true,true
a = 0,分别执行false,false
基于此种情况,为了保证程序的可读性,建议使用if(a) 或 if(a === true)的语法
以下为js数据类型:
字符串('aa',"aaa")、
数字(123,123.00,1.23e2)、
布尔(true,false)、
数组(['a','b','c'])、
对象({firstname:"Bill","lastname":"Gates",age:18})、
Null(null:不存在的对象,如getElementById("xxx"))、
Undefined(undefined:未赋值变量或对象的未声明属性)
document.writeln(typeof 1);//number
document.writeln(typeof NaN);//number
document.writeln(typeof "aa");//string
document.writeln(typeof true);//boolean
document.writeln(typeof [1,2]);//object
document.writeln(typeof {a:1,b:2});//object
document.writeln(typeof null);//object
document.writeln(typeof undefined);//undefined
所以数组也是对象,对象类型变量存储引用,而字符串、数字、布尔为基本类型存储值
再来看看数据的比较:
"==="运算符,表示绝对的相等(类型和内容):
比如:
1 === 1;//true
1==="1";//false 类型不同
"aa" === "bb";//false
true === false; //false
需要注意:
null === null;//true
undefined === undefined;//true
null === undefined;//false
对象类型比较除非引用为同一对象,否则即使两个对象内容相同也为false
"=="运算符,不严格匹配,两个比较对象类型相同时,结果同"===",类型不同时,根据以下规则判断:
1、当存在boolean类型,true转换为1,false转换为0进行比较;
2、当存在string时,字符串为数字且和另一边数值相等为true,其他为false;
3、对象类型和基本类型的比较(待补充。)
4、null == undefined;//true
5、NaN不与任何值相等,包括本身
例如:
number,string比较:
1 == "1";//true
1 == "true";//false
0 == "false";//false
number,boolean比较:
1 == true //true
0 == false //true
2 == true;//false
2 == false;//false
string,boolean比较:
"true" == true;//false
"false" == false;//false
然后是关于if语句的判定,[b]由于js的if语句里允许非boolean值出现,所以需要注意if(a) 和 if(a == true)的写法不仅仅是简洁问题,结论也可能不一样:[/b]
[b]首先,下面这个语法[/b]
if(a){
alert(true);
}else{
alert(false);
}
当(注意此处均为赋值语句):
1、a为string类型时:a = "" (即空字符串)时执行false,其他执行true
2、a为number类型时:a = 0 或 a = NaN 时执行false,其他执行true
3、a = [](空数组) 或 a = {}(空对象) 执行true
4、a=undefined或a=null:执行false
于是,就可以看出if(a) 和 if(a == true)的区别:
1、a为boolean值时,结果相同
2、a为string:
a = "true",分别执行true,false
a = "false",分别执行true,false
a = "0",分别执行true,false
a = "1",分别执行true,true
a = "2",分别执行true,false
3、a为number:
a = 2,分别执行true,false
a = 1,分别执行true,true
a = 0,分别执行false,false
基于此种情况,为了保证程序的可读性,建议使用if(a) 或 if(a === true)的语法
相关文章推荐
- 再学Java基础(2)标识符,变量,数据类型。以及 if与for语句
- 数据类型和数据类型转换以及if语句的使用
- 数据类型,运算符以及语句
- 【js】day02_语法规范_标识符_数据类型_运算符_控制语句
- Kotlin的八大基本数据类型以及if语句,三元运算符
- Java基本语法--数据类型、运算符表达式、基本控制语句、数组使用以及练习
- JavaScript的数据类型和变量声明以及js的语句
- 查询数据库语句报错“数据类型 text 和 varchar 在 equal to 运算符中不兼容。"
- 再学Java基础(2)标识符,变量,数据类型。以及 if与for语句
- 黑马程序员_Java基础_常用基础内容(进制转换、基本数据类型、运算符、流程控制语句等)
- "非规范"数据类型带来的问题
- js_day12---js数据类型+运算符+三大流程控制
- 黑马程序员_Java基础_02常量、变量、数据类型、运算符、语句、程序执行过程
- js等弱类型语言的"鸭子类型"
- Oracle Class2. SQL查询和SQL函数(Oracle数据类型,ddl,dml,dcl,事务控制语言tcl,sql操作符,sql函数,select语句,运算符,分析函数,临时表)
- java基础学习 视频学习 数据类型以及运算符
- sql语句中----删除表数据的"三兄弟"
- jstl "if else" 时间类型转换,多表数据迭代显示
- 【菜鸟学WCF】使用js+ajax调用WCF以及返回数据类型的控制
- 加密解密时遇到的"不正确的数据"以及"要解密的数据长度无效"问题解决方案