JavaScript数据类型与变量

1.1 变量定义的方法

js是一种弱类型脚本语言,在使用变量之前,可以无需定义,想使用某个变量时直接使用。JavaScript支持两种方式老引入变量:、

A) 隐式定义:直接给变量赋值

B) 显示定义:使用var关键字定义

变量没有固定的数据类型,因此可以对同一个变量在不同的时间赋不同的值。JavaScript中的变量是区分大小写的!

1.2类型转换:

JavaScript支持自动类型转换,这种类型转换的功能非常强大,代码如下:

   <script type="text/javascript">
       var a = "3.145";
       var b = a-2;          //b = 1.145
       var c = a+2;          // c = 3,1452
    	alert(b+"\n"+c);
    </script>

转换规律是:

1. 对于减号运算符,因为字符串不支持减号运算符,所以系统自动将字符串类型转换为数值类型

2. 对于加法运算符来说,因为字符串可用加号作为连接运算符,所以系统自动将数值转换为字符串类型,并将两个字符串进行连接运算。

JavaScript提供了一下几个函数来执行强制类型转换

toString():将布尔值,数值等转换为字符串

praseInt():将字符串,布尔值等转换为整型

praseFloat():将字符串,布尔值等转换为浮点型

	
    <script type="text/javascript">
        var a="3.145";
		var b=a+2;             //b=3.1452
		var c=parseFloat(a)+2;  //c=5.145
		alert(b+"\n"+c);
    </script>
	

1.3变量的作用域

在全局范围定义的变量(不管是否使用var)、不使用var定义的变量都是全局变量,全局变量可以被所有的脚本访问。在函数里定义的变量被称为局部变量,局部变量只有在函数内有效。

          <script type="text/javascript">
		var text = "全局变量";
		function myFun(){
			
			age = 20;
			var isMale = true;
			
		}
		myFun();
		alert(text + "\n" + age);
		alert(isMale);
		
	</script>

上面代码中使用var定义一个全局变量,后面又定义了一个变量(没有使用var)也是全局变量,但是必须等到定义该变量的函数执行之后才是全局变量。

<script type="text/javascript">
	 	
	 	var text = "全局变量";
	 	function checkScope(){
	 		
	 		var text="局部变量";
	 		alert(text);
	 	} 
	 	checkScope();
	 	alert(text);
	 	
	 </script>

上述代码首先会输出一个“局部变量”,代码中首先定义一个text的全局变量,其后在函数内定义了text的局部变量,函数中的局部变量覆盖了全局变量,接下来程序在函数外访问text变量,将会看到程序输出“全局变量”,局部变量失效,JavaScript中没有块范围,看如下代码:

           <script type="text/javascript">
		
		function text(o){
			var i = 0;
			if( typeof o == "object"){
				var j = 5;
				for( var k = 0; k < 10; k++ ){}
				document.write(k);
				
			}
			alert(k + "\n" + j);
		}
		text(document);
	</script>

1.4 变量提升

<script type="text/javascript">
		
		var scope="全局变量";
		function text(){
			
			document.writeln(scope +"<br/>");
			 var scope ="局部变量";(1)
			 document.writeln(scope +"<br/>");
		}
		text();
	</script>

此处需要理解的是JavaScript的变量提升机制。所谓的变量提升,指的是变量声明总是被解释器“提升”到函数体的顶部。这意味着上面程序中(1)代码定义了scope局部变量,但解释器会提升该变量,该变量的声明提升到函数体的顶部。

注意: 变量提升只是提升变量的声明部分,而不是提升变量的赋值部分。



    

猜你喜欢

转载自blog.csdn.net/ibliplus/article/details/80992949