javascript数据类型和变量
js是弱类型语言,支持变量声明,存在作用范围,有局部变量和全局变量之分。
1.定义变量
隐式定义:直接给变量赋值;
现实定义:使用var关键字定义变量。
隐式定义:
<script type="text/javascript">
a="See me";
alert(a);
</script>
显示定义:
<script type="text/javascript">
var a="See me";
alert(a);
</script>
2.类型转换
js支持自动类型转换:
<script type="text/javascript">
var a="3.125";
var b=a-2;
var c=a+2;
alert(b+"\n"+c);
</script>
减号自动识别为算术运算,加号识别为字符串运算。
强制类型转换:
toString():将布尔值,数值等转换为字符串
parseInt():将字符串,布尔值等转换为整型
parseFloat():将字符串,布尔值等转换为浮点型
其中parseInt()和parseFloat()只能将带数字的字符串且开头是数字的数字部分转换。
<script type="text/javascript">
var a="3.125";
var b=parseFloat(a)+2;
alert(b);
</script>
<script type="text/javascript">
var a="cc3.125";
var b=parseFloat(a)+2;
alert(b);
</script>
3.作用域
全局变量:在全局范围(不在函数内)定义的变量,不使用var定义的变量。可以被所有脚本访问;
局部变量:在函数内定义的变量,只在函数内有效。当局部变量与全局变量同名时,局部变量会覆盖全局变量。
4.变量提升
<script type="text/javascript">
var a="全局变量";
function test(){
document.writeln(a + "<br>");
var a="局部变量";
document.writeln(a + "<br>");
}
test();
</script>
之所以发上上述情况,是因为js运行机制使得变量声明总是被解释器提升到函数体的顶部,上述程序等同于如下代码:
<script type="text/javascript">
var a="全局变量";
function test(){
var a;
document.writeln(a + "<br>");
var a="局部变量";
document.writeln(a + "<br>");
}
test();
</script>
变量提升只是提升变量的声明部分,而不是提升变量的赋值部分。