1、JavaScript简介
①JavaScript诞生于1995年,主要是用于处理网页中的前端验证。所谓的前端验证就是指检查用户输入的内容是否符合一定的规则,比如用户名长度、密码的长度、邮箱的格式等。(ECMAScript是一个标准)
②一个完整的JavaScript实现应该由三个部分构成:ECMAScript(标准)、DOM(文档对象模型-操作对象)、BOM(浏览器对象模型-操作浏览器)。
③JS特点:解释型语言(不需编译,可直接运行)、类似于C和Java的语法结构、动态语言(可保存任意类的对象)、基于原型的面向对象。
2、JS代码在代码中存放位置
①写在head标签里面:直接编写。
②写在标签的属性中:可以这样写,但是他们属于结构与行为耦合,不方便维护,不提倡使用。
③编写在外部js文件中(推荐使用):通过script标签引入,可以在不同的页面同时引用,也可以利用到浏览器的缓存机制。
3、JS基本知识
①JS基本语法
---JS中严格区分大小写
---JS中每一条语句以分号(;)结尾,如果不写分号,浏览器会自动添加,但是会消耗一些系统资源,开发中,分号必须写。
---JS中会忽略多个空格和换行,所以我们可以利用空格和换行对代码进行格式化。
②变量
---字面量:都是一些不可改变的值(比如:1、2、3...),字面量都是可以直接使用的,但是我们一般不会直接使用字面量。
---变量:可以用变量来保存字面量,而且变量的值可以任意改变的,变量更加方便使用。
---变量的使用:在js中使用var关键字来声明变量,为变量赋值。
③标识符:在JS中所有的可以由我们自主命名的都可以称为标识符(例如:变量名、函数名、属性名等都属于标识符)
命名一个标识符需遵守如下规则:
---标识符中可以含有字母、数字、_(下划线)、$
---不能以数字开头
---标识符不能是ES中的关键字或者保留字
---标识符一般使用驼峰命名法(格式:xxxYyyZzz)
注:JS底层保存标识符时实际是采用Unicode编码,理论上所有的utf-8中含有的内容都可以作为标识符。
④JS中的数据类型(数据类型指的就是字面量的类型)
在JS中一共有6中数据类型(String-字符串、Number-数值、Boolean-布尔型、Null-空值、Undefined-未定义、Object-对象),
其中String、Number、Boolean、Null、Undefined属于基本数据类型,Object属于引用数据类型。
基本数据类型 | 说明 |
---|---|
String |
在JS中字符串需要使用引号引起来,单双引号都可以使用,但是不能混用。(引号不能嵌套) 实例:var str = "hello"; |
Number |
在JS中所有的数值都是Number类型,包括整数和浮点数(小数) 注:可以使用一个运算符typeof来检查一个变量的类型 (语法:typeof 变量) |
Boolean |
布尔值只有两个值,主要用来做逻辑判断,true-真,false-假 使用typeof检测布尔值时,会返回boolean |
Null |
Null类型的值就只有一个:Null。null这个值专门用来表示一个为空的对象 typeof检测null值的类型会返回一个object |
Undefined |
Undefined类型的值只有一个:Undefined 当我们声明一个变量却不赋值时,此变量就是Undefined类型 |
注:
---在字符串中我们可以使用\作为转义字符,当表示一些特殊符号时可以使用\进行转义。
(\" 表示 "、\' 表示 '、\n 表示换行、\t 表示制表符、\\ 表示\)
---在JS中整数的运算基本可以保证精确,如果使用JS进行浮点元素的计算,可能得到一个不太精确的结果,
不能使用JS计算对精确度要求比较高的计算。
⑤强制类型转换:指将一个数据类型强制转换为其他的数据类型
类型转换主要指,将其他的类型转换为String Number Boolean。(其他两种可以,但没有意义)
---将其他的数据类型转换为String
方式一:调用被转换数据类型的toString()方法,该方法不会影响到原变量,它会将转换的结果返回。
var b = a.toString();
注意:是注意:null和Undefined这两个值没有toString()方法,如果调用他们的方法,会报错。
方式二:调用String()函数,并将被转换的数据作为参数值传递给函数,对于Number和Boolean实际上就是调用toString()方 法,但是对于null和Undefined来说,不会调用toString()方法,会直接转换为"undefined"。
a = String(a);
---将其他的数据类型转换为Number
方式一:使用Number()函数
* 字符串——>数字
1.如果是纯数字的字符串,则直接将其转换为数字
2.如果字符串中有非数字内容,则转换为NaN
3.如果是字符串是一个空串或者全是空格的字符串,则转换为0
* 布尔型——>数字
1.true 转为 1
2.false 转为 0
* Null——>数字 转为0
* Undefined——>数字 数字NaN
方式二:这种方式专门用来对付字符串
* parseInt():可以将一个字符串中的有效的整数取出来,然后转换为number。
* parseFloat():作用和parseInt()类似,不同的是它可能获得有效的小数位。
* 如果对非String使用parseInt()或parseFloat(),它会先将其转换为字符串,然后再操作。
---其他进制的数字(了解)
在JS中如果需要表示16进制的数字,则需要以0x开头;如果需要8进制的数字,则需要以0开头;如果需要2进制的数字,则需 要以0b开头,但是不是所有的浏览器都支持。
可以在parseInt()中传递第二个参数,表明采用什么进制进行解析。
a = parseInt(a,10);
---将其他数据类型转换为Boolean
使用boolean()函数:调用Boolean()函数将a转换成布尔值。
* 数字——>布尔 除了0和NaN,其他的都是true。
* 字符串——>布尔 除了空串,其他的都是true。
* 空值——>布尔 转为false。
* Undefined——>布尔 转为false。
* 对象——>布尔 true
4、运算符
①算数运算符
运算符 | 说明 |
---|---|
+ |
两个值进行加法运算,并将结果返回 如果对两个字符串进行加法运算,会将两个字符串进行拼接,并返回。 任何的字符串做加法运算都会先转换为字符串,在做拼串操作,利用这一特点,来将任意一个数据类型转换为string。 我们只需要为任意的数据类型 + "" 即可将其转换String(隐式类型转换,系统自动完成) |
- |
对两个值进行减法运算,并将结果返回 100 - "1" 相当于 100 - 1 |
* |
对两个值进行乘法运算,并返回结果 2 * "8" 相当于2 * 8 |
/ | 对两个值进行除法运算,并将结果返回 |
% | 取模运算(取余数) |
注:任何值做 - * / (减法、乘法、除法)运算时都会自动的转换为number,我们可以利用这一特点做隐式的类型转换,可 以通过为一个值 -0 *1 /1 来将其转化为number。
②一元运算符
注:对于非number类型的值涞水,它会将其先转换为number,然后在运算(可以对其他的数据类型使用+号将其转换成number类型)。
③自增/自减
符号 | 说明 |
---|---|
自增(++) |
通过自增可以使变量在自身的基础上增加1,对于一个变量自增以后,原变量的值会立即自增1。自增分为两种, a++/++a,这两种方式都会立即使原变量的值自增1,不同的是a++和++a的值不同。 1. a++的值等于原变量的值(自增前的值) 2. ++a的值等于原变量自增以后的值(自增后的值) |
自减(--) |
通过自减可以使变量在自身的基础上减1,这两种方式都使原变量的值自减1,不同的是a--和--a的值不同。 1. a--是变量的原值(自减前的值) 2. --a是变量自减以后的值(自减后的值) |
④逻辑运算符
逻辑运算符 | 说明 |
---|---|
非(!) |
可以用来对一个值进行非运算,所谓非运算就是指对一个布尔值进行取反操作。 true——>false false——>true |
与(&&) |
可以对符号两侧的值进行与运算,并返回结果。 JS中的“与”属于短路与,如果第一个数为false,则不会看第二个值。 对于非布尔值的情况: 如果第一个值为true,则必然返回第二个值 如果第一个值为false,则直接返回第一个值 |
或(||) |
可以对符号两侧的值进行或运算并返回结果。 JS中的“或”也是短路的或,如果第一个数为true,第二个值不用检查。 对于非布尔值的情况: 如果第一个值为true,则直接返回第一个值 如果第一个值为false,则直接返回第二个值 |
⑤条件运算符(也叫三元运算符)
语法:条件表达式?语句1:语句2;
执行的流程:条件运算符在执行时,首先对条件表达式进行求值。如果该值为true,则执行语句1,并返回执行结果;任何该值为false,则执行语句2,并返回执行结果。
⑥运算符的优先级
---先乘除,后加减
---在JS中有一个符号优先级的表,在表上越靠上优先级越高,优先级越高优先计算。如果优先级一样,则从左往右计算。
---可以使用括号改变优先级
5、语句
分为条件判断语句、条件分支语句、循环语句。
①条件判断语句:使用条件判断语句可以在执行某个语句之前进行判断,条件成立则执行,条件不成立则不执行。