『JavaScript』JS基本认识
本篇博客介绍一些JavaScript的一些简单语法。
基本语法
JavaScript和C语言一样,注释有两种:
- /* */多行注释,注意不可嵌套;
- //单行注释,只对//后面的有效。
JS中严格区分大小写。
JS中每一条语句都以分号结尾。如果不写分号,浏览器会自动添加,但是会消耗一些系统资源。有的时候浏览器会加错分号,所以在开发中分号必须写。
JS中会忽略多个空格和换行,所以我们可以利用空格和换行对代码进行格式化。
字面量和变量
- 字面量都是一些不可改变的值。如:1、2、3…;字面量都是可以直接使用,但是我们一般都不会直接使用字面量。
- 变量可以用来保存字面量,而且变量的值是可以任意改变的,变量更加方便我们使用,所以在开发中都是通过变量去保存一个字面量,而很少使用字面量。
-
在JS中用var关键字来声明一个变量。
标识符
在JS中所有的可以由我们自主命名的都可以称为是标识符。如:变量名、函数名、属性名。命名一个标识符时需要遵守如下规则:
- 标识符中可以包含字母、数字、_和$;
- 标识符不能以数字开头;
- 标识符不能是JS中的关键字或保留字;
JS底层保存标识符时,采用的是Unicode字符集,所以理论上讲,所有的Unicode字符集中的字符都可以作为标识符。
数据类型
- 在JS中一共有六种数据类型,分别为:String(字符串)、Number(数值)、Boolean(布尔值)、Null(空值)、Undefined(未定义)和Object(对象)。
- 前五种属于基本数据类型,Object属于引用数据类型。
- 可以使用运算符typeof来检查一个变量的类型。
语法:typeof 变量;
String类型
- JS中,字符串需要使用双引号引起来,使用单引号也可以。
-
引号不能嵌套。双引号中不能放双引号,可以放单引号;单引号中不能放单引号,可以放双引号;如果想要在单引号或双引号中放单引号或双引号,需要使用转义字符进行转义。
- 我们使用typeof来看一下String类型。
Number类型
-
JS中所有的数值都是Number类型,包括整数和浮点数;
- JS中可以表示的数字的最大值:
Number.MAX_VALUE
,如果使用Number表示的数字超过了最大值,会返回一个Infinity,表示正无穷,Infinity是一个字面量;Number.MIN_VALUE
表示大于0的最小值,即最小的整数; -
NaN也是一个特殊的数字,Not a Number;NaN是同样是字面值常量,表示不是一个数字;
-
JS中整数的运算可以保证精确。但是浮点数的运算,可能得到不精确的结果,所以不要使用JS进行对精确度要求比较高的运算。
Boolean类型
-
布尔值只有两个:true(真)、false(假);
- 主要用来做逻辑判断。
Null类型
-
Null类型的值只有一个,就是null。null这个值专门用来表示为空的对象,使用typeof检查null值,会返回object。
Undefined类型
-
Undefined类型的值也只有一个,就是undefined。当声明一个变量,但是并不给变量赋值时,它的值就是undefined。
强制类型转换
强制类型转换就是将一个数据类型强制转换为其他的数据类型。
转为String类型
方法一:调用被转换数据类型的toString()方法,该方法不会影响到原变量,它会将转换的结果返回。
-
下面看一个例子:
-
注意:null和undefined这两个值没有toString()方法,如果调用会报错。
方式二:调用String()方法,并将被转化的数据作为参数传入。
-
使用String()方法进行强制类型转换,对于Number和Boolean类型实际上调用的是toString()方法。但是对于Null和Undefined类型会将null或undefined转为"null"或"undefined"。
转为Number类型
方式一:使用Number()方法。
-
String类型转Number类型。如果是纯数字的字符串,则直接将其转换为数字;如果字符串中有非数字的内容,则转换为NaN;如果字符串是子串或者是一个全部是空格的字符,则转为0。
-
Boolean类型转为Number类型。true转为1,false转为0。
-
Null类型转为Number类型。转数字为0。
-
Undefined类型转Number类型。undefined转数字为NaN。
方式二:这种方式专门针对字符串。
-
parseInt()方法:把一个字符串转换为一个整数。会将字符串中有效的整数内容取出来,然后转换为Number。
-
parseFloat()方法。把一个字符串转换为浮点数。
该方法可以传第二个参数指定转换为几进制的数字。 - 如果对非String类型使用parseInt()和parseFloat()方法,它会先将其转换为String,然后再操作。
转换为Boolean类型
使用Boolean()方法。
-
Number类型转Boolean类型。除了0和NaN,其余的都是true。
-
String类型转Boolean类型。除了空串,其余的都是true。
-
Null类型和Undefined类型都会转为false。Object类型会转为true。
运算符
通过运算符可以对一个或多个值进行运算。如:typeof就是运算符,可以获得一个值的类型。将该值的类型以字符串的形式返回。
算数运算符
常见的算数运算符有:+ - * / %
,这五种。
- 当对非Number类型的值进行运算的时候,会先将其转换为Number类型。
-
任何值和NaN进行运算,结果都是NaN。
- 注意,当+的两个操作数中有字符串时,执行的是字符串拼接操作。
我们可以利用这一特性,对一个其他类型的数据加上一个空串来将其转换为String类型。 -
/是算数除,不是整除。
-
任何类型的值作- * /运算时都会自动先转换为Number类型,可以利用这一特性,将其他类型的值转换为Number类型。
一元运算符
只需要一个操作数的运算符。如:+ - ++ --
等。
-
正号(+),将一个数转换为正数,如果操作数是非Number类型,先将其转换为Number类型,可以利用这一特性将其他类型的值转为Number类型。
- 负号(-),将一个数转换为其相反数。
- 自增运算符(++)和自减运算符(–)和C语言的用法一样,含义也相同。
逻辑运算符
非(!),取反操作,如果操作数为非Boolean类型,会先将其转换为Boolean类型,然后再运算。
- 我们可以借助这一特点,来将其他类型的值转换为Boolean类型。
非布尔值的与或:
对于非布尔值,进行与或运算。会先将其转换为布尔值,然后再进行运算并且返回原值。
-
与运算(&&)。如果第一个值为true,则返回第二个值;如果第一个值为false,则直接返回第一个值。
-
或运算(||)。如果第一个值为true,直接返回第一个值;如果第一个值为false,则返回第二个值。
赋值运算符
- 可以将符号右侧的值赋值给符号左侧的变量。
- 如:
== += -= *= /= %=
。
关系运算符
通过关系运算符可以比较两个值之间的大小关系。如果关系成立,返回true,关系不成立返回false。常见的关系运算符有:> >= < <=
。
- 非Number类型的情况。对于非Number类型的比较,比较前会先将其转换为Number类型。
-
任何类型的任何值和NaN做任何比较,结果都是false。
- 如果关系运算符的两个操作数都为String类型时,不会将其转换为Number类型进行比较,而是进行String类型的字典序比较。
相等运算符
相等运算符用来比较两个值是否相等。不等运算符(!=)用来判断两个值是否不相等,会对变量进行自动类型转换。
- 当==的两个操作数类型不同的时候,会转为相同的类型,再进行比较。大部分情况下都是转为Number类。
-
undefined衍生自null,这两个值做相等判断的时候,会返回true。
-
NaN不和任何值相等,包括它自身。
-
判断一个值是不是NaN,可以使用方法isNaN()。
全等运算符(==)用来比较两个值是否全等,不会做隐式类型转换。类型不同直接返回false;不全等运算符(!==),判断两个值是否不全等,不会做隐式类型转换。类型不同直接返回true。
- 我们来看一个代码演示:
条件运算符
-
条件运算符也就是三目运算符,和C语言中的含义一样,使用也相同,
? :
。
流程控制语句
流程控制语句分为三类:
- 条件判断语句;
- 条件分支语句;
- 循环语句。
在看这三种语句之前,我们先来了解一下JS中的代码块的含义。
- 在JS中可以使用{}来为语句进行分组,同一个{}中的语句称为一组语句;
- 注意,JS中的代码块只具有分组的作用,没有其他作用,不会形成一个局部域。代码块内定义的变量,在代码块外可以访问到。
条件判断语句
我们直接来一个问题来理解一下条件判断语句。
- 从键盘上输入一个数,判断这个数是奇数还是偶数。
我们可以使用prompt()方法获取键盘上输入的内容,以字符串的方式返回。
条件分支语句
同样的,我们来看一个问题帮助理解:
-
从键盘上输入1~7,根据输入输出星期几。
循环控制语句
我们直接来看一个问题:
-
判断1~10中每个数是偶数还是奇数。打印出所有的结果。
break和continue
使用break语句可以结束循环;使用continue语句可以结束本次循环,立即进入下一次循环。和C语言中的用法相同。
- JS中可以为循环语句创建一个label,来标识当前循环;
- 使用break和continue时,后可以跟label,来break或continue指定循环。
我们来看一下效果: