JavaScript 是弱类型脚本语言,使用变量之前,可以无须定义,想使用某个变量时直接使用即可。
JavaScript脚本语言,对大小写敏感。
javaScript 支待两种方式来引入变量:
1、隐式定义: 直接给变量赋值。
2、显式定义:使用 var 关键字定义变量。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script type="text/javaScript">
var x="显式声明";
y="隐式声明";
alert(x);
document.write(y);
</script>
</head>
<body>
</body>
</html>
强制类型转换:
1、toString(): 将布尔值、数值等转换成字符串。
2、parselnt(): 将字符串、布尔值等转换成整数。
3、parseFloat(): 将字符串、布尔值等转换成浮点数。
用parseInt(),parseFloat()把不是以数值开头的字符串转换时,转换成 NaN。
例如:
var a = "12.3aaa4";
a=parseFloat(a); //结果:a=12.3
var b = "aa12.3";
b=parseFloat(b); //结果:b=NaN
alert(a+"\n"+b);
undefined 、null、布尔值及其他对象: 一律转换成 NaN。
变量作用域:
全局变量可以被所有的脚本访问。
在函数里定义的变量称为局部变量,局部变量只在函数内有效。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script type="text/javaScript">
// 全局变量
var text = "全局变量";
function fun(){
// 在函数里用var声明的是局部变量,只在函数体里生效
var isMale = "局部变量";
// 不用var声明在函数里是全局变量,函数外也可以访问
opo = 199;
}
//函数调用
fun();
alert(text+"\n"+opo);//全局变量 199
alert(isMale); // 报错,找不到声明
</script>
</head>
<body>
</body>
</html>
JavaScript没有块作用域,与c,java等语言不同.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script type="text/javaScript">
function fun() {
if (true){
// 定义变量 j,变量j的作用范围是整个函数内,而不是块内
var j = 5 ;
for(var k = 0; k < 10; k++){
// 因为 JavaScript 没有代码块范围
// 所以k的作用范围是整个函数内,而不是循环体内
document.write (k) ;
}
}
// 即使出了循环体, k 的值依然存在
alert(k + "\n" + j) ;
}
fun();
</script>
</head>
<body>
</body>
</html>
运行结果:
JavaScript变量提升机制:
在函数里,只提升声明部分,不提升赋值部分
(undefined)代表只声明,不赋值或者对象里面没有这个变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script type="text/javaScript">
var scope = "全局变量";
function fun(){
document.writeln(scope+"<br>");
// 变量提升至函数一开始定义,但是不赋初值
var scope = "局部变量";
document.writeln(scope+"<br>");
}
fun();
</script>
</head>
<body>
</body>
</html>
运行结果:
undefined
局部变量
函数内实质运行机制:
function fun(){
var scope;
document.writeln(scope+"<br>");
scope = "局部变量";
document.writeln(scope+"<br>");
}
css3新增的let变量
var定义变量的问题
1、没有块作用域
2、var 定义的全局变量会自动添加全局 window 对象的属性。
3、var 定义的变量会提前装载 。
let定义变量
1、有快作用域。
2、let定义的变量不会添加到window对象中。
3、不会提前装载。
使用let把var的问题全部弥补了,所以使用let定义变量更符合规范
var提前装载,也就是变量提升问题,在let中报错:
<script type="text/javascript">
var name= 'yeeku'
function func(){
//下面的 name 变量不存在, 因此程序导致错误
console.log (name) ;
let name= 'www';
console.log (name) ;
}
func () ;
</script>
使用const定义常量
const:定义常量,在声明时必须赋值。且不能修改。
const MAX_LEAVE = 120;