一、JS变量和数据类型
二、JS的运算符和条件判断语句
一、JS变量和数据类型
1、数据类型
JS常用的数据类型主要包括6种:
1、String
2、undefined
3、boolean
4、null
5、number
6、object
其中,最后两种又分别囊括了具体的几种变量类型
number:
number(整数支持各种进制) | object |
---|---|
包括整形、浮点型 | object、数组、类 |
不过需要注意的是,JS是一门 “弱类型”语言。所谓的弱类型语言就是:
弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。弱类型语言包括vb
、PHP、javascript等语言。
弱类型语言通常在声明变量的时候不会指定具体的变量类型,通常的格式是:声明变量关键字+变量名
例如:var name=“五条悟”;
var是变量声明的关键字,name是变量名。通常在声明变量的时候就赋初值。
若想查看变量的数据类型,可以通过typeof()来查看
例如:
var num=“0”;
document.write(typeof(num));
结果为:String
这里需要注意一个特殊情况:当var num=null 时,typeof()的结果会输出object。
2、类型转换(与java相似)
String→number类型
字符串类型转为number类型通常使用 parseInt() 或者 parseFloat()。
举例:
parseInt('123.4')=123 parseInt('347s21')=347 parseFloat('123.44.56')=123.44 parseFloat('s143')=NaN
通过上面的例子我们可以发现,当字符串中出现不能转换为数字的值时,则只会取前面的数字部分。若第一个字符都不是数值,那么直接会输出 “NaN”
number类型→String类型
主要有两种方式:
1、强转:String()
2、toString()
var num=4;
document.write(String(num));
var num=5.3;
document.write(num.toString());
两种方法无明显区别。只是在声明变量而没有赋初值的时候toString()会报错,而String()会输出undefined
还有比较特殊就是boolean强转的时候:
Boolean()=false;
Boolean(0)=false;
Boolean(null)=false;
Boolean("")=false;
Boolean(undefined)=false;
Boolean(false)=false;
Boolean(NaN)=false;
此上7种情况均为false,除此之外用boolean强转的都为true。因为非空,非0,非空字符串或对象经过boolean()强转都默认为true
二、运算符及判断语句
1、运算符
一些最常见的运算符就不再做过多的赘述了,这里出现了“===”和“!==”两个新的运算符。作用是比较变量值和类型是否相等。这与java里的“==(比较地址)”和“equals()(比较值)”类似。
这里还要讨论一下JS中的特殊的情况。当相加的两个数字的值为:数字、布尔值、null时,会先把布尔值和null转化为数字再相加。
例如:
var a = null, b = true; console.log(a + b)=1;
这里,a=null转换为数字为0,b=true转换为数字为1。所以相加=1。
2、条件判断语句
主要的两种条件判断语句
1、if()…else if()…else
2、switch()
结构如下:
//if...else条件判断
if (条件表达式) {
//js代码
} else if(条件表达式){
//js代码
}else{
//js代码
}
//switch条件判断
switch(表达式){
case 值1:
//JS语句1
break;
case 值2:
//JS语句2
break;
default:
//JS语句3
break;
}
这里直接上一个例子
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
var year=parseInt(prompt("请输入一个年份:"));
var month=parseInt(prompt("请输入一个月份:"));
if(isNaN(year)||isNaN(month)){
alert("请输入数字");
}else if (year<0 || month>12 || month<1) {
alert("超出范围");
} else{
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:alert("该月共有31天");break;
case 4:
case 6:
case 9:
case 11:alert("该月共有30天");break;
case 2:
if((year%4==0 && year%100!=0)||(year%400==0)){
alert("该月共有29天");break;
}else{
alert("该月共有28天");break;
}
}
}
</script>
</body>
</html>