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

文章目录

  • 简介
    • 运行JavaScript
    • 导入JavaScript文件
    • 使用script元素的defer推迟脚本执行
    • 使用script元素的async异步执行脚本
    • noscript元素
  • 数据类型和变量
    • 定义变量的方式
    • 类型转换
    • 变量作用域
    • 变量提升
    • 新增的let变量
    • 使用const定义常量
  • 基本数据类型
    • 数值类型
    • 字符串类型

简介

运行JavaScript

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


	运行JavaScript

2.使用元素来包含JavaScript代码


	

导入JavaScript文件


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

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


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

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


noscript元素

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


数据类型和变量

定义变量的方式

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


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


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

类型转换

JavaScript支持自动类型转换。

字符串类型 数值型 布尔型 对象
undefined “undefined” NaN false Error
null “null” 0 false Error
字符串 不变 数字或NaN true String对象
空字符串 不变 0 false String对象
0 ”0“ 0 false Number对象
NaN “NaN” NaN false Number对象
Infinity ”Infinity“ Infinity true Number对象
-Infinity ”-Infinity“ -Infinity true Number对象
数值 数值字符串 不变 true Number对象
true “true” 1 不变 Boolean对象
false “false” 0 不变 Boolean对象
对象 toString()返回值 valueOf(),toString()或NaN true 不变

强制类型转换

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

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

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

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

变量作用域

全局变量

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

局部变量

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

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

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

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

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

变量提升

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

示例:


执行结果:

undefined
局部变量

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

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

新增的let变量

var定义变量存在的问题:

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

let变量解决了上述问题。

使用const定义常量

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

const MAX_AGE = 120;

基本数据类型

数值类型

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


如果数值只有小数部分,则可以省略整数部分的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_INFINITY Infinity(正无穷大)
Number.NEGATIVE_INFINITY -Infinity(负无穷大)
Number.NaN NaN(非数)

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

字符串类型

必须用引号括起来,可以单引号,也可以是双引号。
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 十六进制(该数值指定)

你可能感兴趣的:(js)