JavaScript语法(一)简介、数据类型、变量

简介

运行JavaScript

两种方法:
1.使用javascript:前缀构建执行JavaScript代码的URL

<body>
	<a href="javascript:alert('运行!');">运行JavaScript</a>
</body>

2.使用<script…/>元素来包含JavaScript代码

<body>
	<script type="text/javascript">
		alert("运行");
	</script>
</body>

导入JavaScript文件

<script type="text/javascript" src="test.js"></script>

使用script元素的defer推迟脚本执行

defer属性告诉浏览器要等整个页面载入之后、解析完毕之后才执行<script…/>元素中的脚本。
该属性只能作用于外部脚本文件,它对于<script…/>元素内嵌的脚本不起作用。

<script type="text/javascript" src="test.js" defer></script>

使用script元素的async异步执行脚本

在传统模式下,浏览器会按照从上到下的方式解析HTML页面的元素。指定async属性的<script…/>元素会启动新线程、异步执行<script…/>元素导入的脚本文件,浏览器也会继续向下解析、处理页面内容。
该属性只能作用于外部脚本文件,它对于<script…/>元素内嵌的脚本不起作用。

<script type="text/javascript" src="test.js" async></script>

noscript元素

该元素用来向不支持JavaScript或禁用了JavaScript的浏览器显示提示信息。用法:直接在该元素内放提示信息即可,无须指定任何属性。

<noscript>
	该浏览器不支持JavaScript
</noscript>

数据类型和变量

定义变量的方式

1.隐式定义
直接给变量赋值。

<script type="text/javascript">
	a = "Hello";
	alert(a);
</script>

2.显示定义
使用var关键字定义变量。

<script type="text/javascript">
	var a;
	a = "Hello";
	alert(a);
</script>

使用过程中变量的数据类型可以随意改变。JavaScript中的变量是区分大小写的。

类型转换

JavaScript支持自动类型转换。

字符串类型数值型布尔型对象
undefined“undefined”NaNfalseError
null“null”0falseError
字符串不变数字或NaNtrueString对象
空字符串不变0falseString对象
0”0“0falseNumber对象
NaN“NaN”NaNfalseNumber对象
Infinity”Infinity“InfinitytrueNumber对象
-Infinity”-Infinity“-InfinitytrueNumber对象
数值数值字符串不变trueNumber对象
true“true”1不变Boolean对象
false“false”0不变Boolean对象
对象toString()返回值valueOf(),toString()或NaNtrue不变

强制类型转换

  • toString() 将布尔值、数值等转换成字符串。
  • parseInt() 将字符串、布尔值等转换成整数。
  • parseFloat() 将字符串、布尔值等转换成浮点数。

当使用parseInt()或parseFloat()时注意:

  • 字符串值 若是一个数值字符串,则可以转换成一个数值,否则将被转换成NaN。
  • undefined、null、布尔值及其他对象 一律转换成NaN。

当使用toString()时:转换结果全是object。

变量作用域

全局变量

  • 在全局范围(不在函数内)定义的变量(不管是否使用var)
  • 不使用var定义的变量(在函数里不用var定义也是全局变量)

局部变量

  • 在函数里定义的变量(使用var定义),离开函数失效。

如果全局变量和局部变量使用相同的变量名,则局部变量将覆盖全局变量。

JavaScript的变量没有块范围,即在if语句块内定义的变量,在块外也可以使用。

定义变量用var和不用var的区别:

  • 使用var定义,程序将强制定义一个新变量。
  • 不使用var定义,程序总将该变量当成全局变量。如果前面定义了同名的全局变量,此时就是对已有的全局变量赋值;如果前面没有定义,此时就是定义一个新的全局变量。

变量提升

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

示例:

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

执行结果:

undefined
局部变量

上面test()函数等同于如下形式:

	function test(){
		var str;
		document.writeln(str + "<br>");
		str = "局部变量”;
		document.writeln(str + "<br>");
	}
  • 变量提升只是提升变量声明部分,并不会提升变量赋值部分。
  • 变量提升不需要定义变量的语句真正执行,只要在函数中包括了定义变量的语句,该变量声明就会被提升到函数体的顶部。

新增的let变量

var定义变量存在的问题:

  • 没有块作用域
  • 全局变量会自动添加全局window对象的属性
  • 会提前装载(即变量提升)

let变量解决了上述问题。

使用const定义常量

只能在定义时指定初始值(且必须指定,如果不指定,会出错),以后不允许再改变。

const MAX_AGE = 120;

基本数据类型

数值类型

包含整数或浮点数。
科学技术法:以E为间隔符号,E不区分大小写。

<script type="text/javascript">
	var a,b;
	a = 5E2;
	b = 1.23e-3;
</script>

如果数值只有小数部分,则可以省略整数部分的0,但小数点不能省略。

a = .43e3;

JavaScript除了支持十进制外,也支持十六进制数和八进制数。

a = 0x12; //十六进制
b = 014; //八进制

当数值变量的值超出了其表数范围时,将出现两个特殊值:Infinity(正无穷大)和-Infinity(负无穷大)。

  • Infinity与-Infinity之间可以进行算术运算,结果为NaN。
  • 与其他普通数值进行算术运算时,得到的结果仍然是无穷大。
  • 两个Infinity总是相等,两个-Infinity总是相等。
  • JavaScript中的算术运算允许除数为0,正数除零的结果是Infinity,负数除零的结果是-Infinity,零除零的结果是NaN。

NaN,表示非数,即Not a Number。0除0,两个无穷大执行算术运算都将产生NaN。NaN不与任何数值变量相等,NaN==NaN返回false。JavaScript提供isNaN()函数来判断某个变量是否为NaN。


特殊值通过JavaScript的内嵌类Number访问。

Number类的常量特殊值
Number.MAX_VALUE数值型变量允许的最大值
Number.MIN_VALUE数值型变量允许的最小值
Number.POSITIVE_INFINITYInfinity(正无穷大)
Number.NEGATIVE_INFINITY-Infinity(负无穷大)
Number.NaNNaN(非数)

对于浮点数值的比较,由于精度丢失的问题,建议使用差值比较法——判断两个浮点型变量是否相等,通过判断两个浮点型变量的差值,只要差值小于一个足够小的数即可认为相等。

字符串类型

必须用引号括起来,可以单引号,也可以是双引号。
JavaScript没有字符类型。
JavaScript以String内建类表示字符串,该类的基本方法:

  • String() 类似面向对象的构造器,可以构建一个字符串。
  • charAt() 获取字符串指定索引处的字符。
  • charCodeAt() 获取字符串指定索引处的字符的Unicode值。
  • length 属性,直接返回字符串长度,JavaScript中的中文字符算一个字符。
  • toUpperCase() 将所有字母转换成大写字母
  • toLowerCase() 将所有字母转换成小写字母
  • fromCharCode() 静态方法,直接通过String类调用该方法 ,将一系列Unicode值转换成字符串。
  • indexOf() 返回字符串中特定字符串第一次出现的位置。
  • lastIndexOf() 返回字符串中特定字符串最后一次出现的位置。
  • substring() 返回字符串的某个子串。
  • slice() 返回字符串的某个子串,功能比substring()更强大,支持负数参数。
  • match() 使用正则表达式搜索目标子字符串。
  • search() 使用正则表达式搜索目标子字符串。
  • concat() 用于将多个字符串拼加成一个字符串。
  • split() 将某个字符串分隔成多个字符串,可以指定分隔符。
  • replace() 将字符串中某个子串以特定字符串替代。

indexOf()和lastIndexOf() 用于判断某个子串的位置。

  • indexOf(searchString [, startIndex])
  • lastIndexOf(searchString [, startIndex])

searchString为要搜索的字符串,startIndex为搜索起始位置。如果字符串中没有包含目标字符串,则返回-1。


substring()和slice()

  • substring(start [, end]) ,从start开始,到end之前(不包含end),要是没有end参数,将从start处一直截取到字符串尾。
  • slice(start [, end]),与substring()的功能基本一致,区别是可以接受负数作为索引,当使用负索引值时,表示从字符串的右边开始计算索引,即最右边的索引为-1。(可以将负索引值转为 正索引值=字符串长度+负索引值)

match()和search() 都支持使用正则表示式作为子串

  • match() 返回值为字符串数组或null,如果搜索到匹配子串,则返回字符串数组;否则返回null。
  • search() 返回值为整型变量,如果搜索到匹配子串,则返回子串的索引值;否则返回-1.

如果要在字符串中使用单引号、双引号等特殊字符,则必须使用转义字符

  • \b 退格
  • \t 制表符
  • \n 换行
  • \v 垂直制表符
  • \r 回车
  • " 双引号
  • 单引号
  • \ 反斜线
  • \OOO 八进制
  • \xHH 十六进制
  • \uHHHH 十六进制(该数值指定)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值