JavaScript的数据类型以及变量

JavaScript里面的数据类型、变量

数据类型

JavaScript里面,公有五个基本数据类型:

  • 数值类型:包含正数和浮点数
  • 布尔类型:只含有true和false
  • 字符串类型:字符串变量和其他高级语言一样,必须用引号括起来,但是这里可以上双引号,也可以是单引号
  • undefined类型:专门用来确定一个已经创建但是没有初值的变量
  • null类型:用于表明某一个变量的值为空
数值类型

不仅包括整形类型,也包括所有的浮点型类型,且数值都是以IEEE754双精度浮点数格式保存

数值类型也支持科学计数法表示

<script type="text/javascript">
	// 显式声明变量a , b
	var a , b;
	// 给a , b使用科学记数法赋值,其值应该为500
	a = 5E2;
	b = 1.23e-3;
	// 使用警告提示框输出变量a的值
	alert(a + "\n" + b);
</script>

执行结果:
在这里插入图片描述
数值变量不要以0开头,js不仅支持十进制,也支持其他的比如十六进制,八进制,而,八进制又是以 0 开头,十六进制以0x或者0X开头

当数值类型超出范围时,将出现两个特殊值:Infinity和-Infinity,分别代表正无穷和负无穷,且,正负无穷和任意数做运算,都还是正负无穷。但是特殊的Infinity 与-Infinity做算术运算时,结果将等于NaN(Not a Number)

字符串类型

字符串类型必须用引号,可以是双引号,也可以是单引号

var a = 'a';	//这里a是字符串类型,而不是字符类型(JavaScript没有字符类型)

JavaScript与java不同,JavaScript里面的字符串比较不需要equals方法,用“==”就可以比较两个字符串是否相等

下面是一些常用的对字符串操作的方法或属性

方法作用
String()类似于面对对象语言中的构造器,可以构造一个字符串
charAt()或许字符串特定索引处的字符
length返回字符串的长度,且中文算一个字符
indexOf()返回字符串中特定字符串第一次出现的索引
substring()返回字符串的某一个子串
布尔类型

只有true 和false两个值,通常用于逻辑运算

undefined 和 null

undefined只有一个值undefined,表示某个变量不存在,或者说没有初始化,null 用于表示某一个变量为空,即undefined表示某一个值只是定义了,但是没有初始化,而null 代表某一个值定义了且初始化了,只是初始化的值为null,undefined就相当于高级语言里面的null,而null就相当于高级语言里面,给某一个一个变量一个值了,就拿Java里面String来说:

String a = null ;
String b = "";

undefined在值上的差别就相当于a 和 b 的差别,一个是没有初始化,一个是初始化了,只是生命都没给
上面都只是二则的值上的差别,在类型上,我们可以使用精确等于符(===)比较

<script type="text/javascript">
	// 声明变量x , y
	var x , y = null;
	// 判断x的值是否为空
	if (x === undefined) 
	{
		alert('声明变量后默认值为undefined');
	}
	if (x === null)
	{
		alert('声明变量后默认值为null');
	}
	// 判断x(其值为undefined)是否与y(其值为null)相等
	if (x == y) 
	{
		alert("x(undefined)==y(null)");
	}
	// 测试一个并不存在的属性
	if(String.xyz === undefined)
	{
		alert("不存在的属性值默认为undefined");
	}
</script>

执行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论:

当要比较undefined与null两个类型的值是否相同时,一定要使用精确等于符“===”

变量

作为弱类型语言的JavaScript,有两种变量定义方式:

  • 隐式定义:直接给变量赋值
  • 显示定义:使用 var 关键字定义变量

JavaScript是弱类型语言,变量没有固定的数据类型,所以可以在不同的时候给变量赋不同的值,类型根据值的类型而定

<script type = "text/javascript">
	var a;	//显示声明变量a,此时可以没有初始值
	a = true;	//给变量a赋值,由于赋值为true 所以a是布尔类型
	a = 1;	//此时变量的类型是数值类型
	alert(a);	//使用过警告框输出a
</script>

JavaScript与html的不同:JavaScript中变量的定义区分大小写,因此变量a与变量A是不同的两个变量

也可以一次性过定义多个变量

var a, b, c;	//一次性定义了三个变量a,b,c
var a, b = 1, c = 2;	//一次性定义了三个变量a,b,c;且给b赋值1,给c赋值2
类型转换

JavaScript支持类型的制动转换

<script type = "text/javascript">
	var a = "3.145";	//定义字符串变量
	var b= a - 2;	//让字符串变量和数值变量执行加法运算
	var c = a + 2;
	alert(b + "\n" + c);
</script>

结果:
在这里插入图片描述
由结果可以总结出:

  • 对于减法运算符:因为字符串不支持减法运算,所以系统自动将字符串转换为数值,然后做减法运算
  • 对于加法运算符:因为字符串支持加法运算,系统将自动将数值类型转换为字符串类型,然后将两个字符串连接

各种类型自动相互转换表如下:

目标类型
字符串类型数值型布尔型对象
undefine"undefine"NaNfalseError
null"null"0falseError
字符串当前值数值或NaNtrueString对象
空字符串当前值0falseString对象
0"0"0falseNumber对象
NaN"NaN"NaNfalseNumber对象
Infinity"Infinity"InfinitytrueNumber对象
-Infinity"-Infinity"InfinitytrueNumber对象
数值数值字符串当前值trueNumber对象
true"true"1trueBoolean对象
false"false"0falseBoolean对象
对象toString()的返回值valueOf(),toString()或NaNtrue当前值

这些自动转换可读性差,所以我们还可以使用强制类型转换:

  • toString():将布尔类型、数值等转换为字符串类型
  • parseFloat():将字符串、布尔值等转化为浮点数
  • parseInt():将字符串、布尔值等转化为整数
变量作用域
  • 全局变量:在全局范围(不在函数内)定义的变量(不管使用var)、不适用var定义的变量都是全局变量
  • 局部变量:在函数里定义的变量称为局部变量
变量提升

变量提升:变量声明总是会被解释器“提升”到函数体的顶部

let变量与const变量

let:

var变量定义可能存在的缺点:

  • var定义的变量没有快作用域
  • var定义的全局变量会自动添加到全局window对象的属性
  • var定义的变量会提前装载
为了解决上面的一些缺点,就出现了let变量
<script type="text/javascript">
for (let i = 0; i < 10 ; i++)
{
	console.log(i);
}
// 报错:Uncaught ReferenceError: i is not defined
console.log("循环之外:" + i);
</script>

我们可以看到在for之外,let变量就不能在使用了,这个作用域,就相当于高级语言的局部变量的意思

const:

该关键字用于定义常量,且该常量只能在定义时指定初始值(且必须指定初始值,且之后不允许改变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值