本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一.JavaScript基础知识
1.1 JavaScript的基本组成
BOM:浏览器对象模型
1.2 JS代码编写的位置
1.2.1 结构与行为耦合(不方便维护,不推荐使用)
(1)可以将js代码编写到中的元素(标签)的属性中
<button onclick="alert('乌拉乌拉');">点击这里</button>
(2)可以将js代码写在超链接的href属性中,当点击超链接时,会执行js代码
<a href="javascript:alert('哇竟然可以点!');">这里也可以点</a>
同时,如果想要超链接点完以后没有反应,从而要用js实现并处理一些功能的话可以这样:
<a href="javascript:;">这里也可以点</a>
1.2.2 写入外部(便于同时引用,也可用到浏览器缓存机制)
(1)将js编码写在script标签中
(2)将js编码编写在外部js文件中,然后通过script标签引入,引入格式如下:
<script type="text/javascript" src="指向外部文件路径"></script>
(3)script标签一旦用于引入外部文件就不能再编写代码了,即使写了浏览器也不会再执行,如果需要,可以再创建一个script标签用于编写内部代码。而且js代码是按照从上到下一行一行执行的。
二.js中的基本语法
1.js中严格区分大小写;
2.js中每条语句以分号(;)结尾,但是如果不写分号浏览器也会自动添加,不过会消耗一些系统资源,有些时候会加错分号,故开发中必须写分号;
3.js中会忽略空格和换行,所以可以利用空格和换行对代码进行格式化;
三.一些其他的小知识点补充
3.1 字面量与变量
字面量即不可改变的值,都是可以直接使用的,但是一般不会直接使用字面量。
变量可以用来保存字面量,而且变量的值可以任意改变,变量更方便使用,一般都是通过变量保存一个字面量。也可以通过变量名来描述字面量。
3.2 标识符
凡是可以由编写者自主命名的都可以称为标识符,例如:变量名、函数名、属性名都属于标识符。
命名标识符要遵循的规则:
1.标识符中可以含有字母、数字、_、¥
2.标识符不能以数字开头
3.标识符不能是ES中的关键字或保留字
4.标识符一般采用驼峰命名法
3.3 数据类型
数据类型指的是字面量的类型,JS中一共有六种数据类型
String、Number、Boolean、Null、Undefined属于基本数据类型
Object属于引用数据类型
3.3.1 字符串String
在js中字符串需要用引号引起来,双引号或者单引号都可以,但是引号不能嵌套,双引号里边不能放双引号,单引号里边不能放单引号。
在字符串中可以使用\作为转义字符,就类似于html中空格用
来表示。当表示一些特殊符号时可以使用\进行转义
" 表示"
' 表示'
\n 表示换行
\t 制表符
\ 表示\
下面是个小例子:
str="\\\";
alert("str");//输出字面量 字符串str
alert(str);//输出变量str
3.3.2 数值Number
js中的所有数值都是Number类型,包括整数和浮点数(小数)。
可以使用一个运算符typeof
来检查一个变量的类型
语法:
typeof 变量
可以写在console.log()里边
JS中表示的数字的最大值:Number.MAX_VALUE
最小值(大于0的):Number.MIN_VALUE
如果使用Number表示的数字超过了最大值,则会返回“Infinity”表示正无穷,同时Infinity是一个字面量,定义时不用加“”,使用typeof检查Infinity也会返回number
NaN 是一个特殊的数字,表示Not A Number,也是字面量
如果使用JS进行浮点数运算,可能得到一个不精确的结果,如果要进行精确度要求比较高的运算尽量放在页面、服务器。
3.3.3 布尔值Boolean
布尔值只有两个值true(逻辑真)和false(逻辑假),主要用于逻辑判断
使用typeof检查一个布尔值时,会返回boolean
3.3.4 空值Null
Null类型的值只有一个,就是null,这个值专门用来表示一个为空的对象
使用typeof检查一个布尔值时,会返回object
3.3.5 未定义Undefined
Undefined类型的值也只有一个,就是undefined
当声明一个变量但不给变量赋值时,变量的值是undefined
使用typeof检查一个undefined时,会返回undefined
3.3.6 对象Object
3.4 强制类型转换
指将一个数据类型强制转换为其他的数据类型
类型转换主要指将其他的数据类型转换为String、Number、Boolean
调用XXX的YYY()的方法:
XXX.YYY();
3.4.1 转换为String
方式一: 调用被转换数据类型的toString()方法(不会影响到原变量,会将转换的结果返回)
调用谁谁谁的toString()方法:
谁谁谁.toString();
但是null和undefined的值没有toString()方法,会报错
方式二: 调用String()函数,并将被转换的数据作为参数传递给函数
a = 123;
a = String(a);
console.log(typeof a);
console.log(a);
//"string"
"123"
使用String()函数做强制类型转换时,对于Number和Boolean实际上就是调用toString()方法。但对于null和undefined(字面量)就不会调用toString(),而是会转换成字符串。
方式三:可以运用任何值+字符串改变任何值的类型
var c = 123;
c = c + "";//空串也是字符串
console.log(typeof c);
console.log(c);
//"string"
"123"
3.4.2 转换为Number
方式一:使用Number()函数(和String函数用法一样)
转换情况:字符串-->数字
1.纯数字的字符串,则直接转换为数字
2.如果字符串中有非数字的内容,则转换为NaN
3.如果字符串是一个空串或者是一个全是空格的字符串,则转换为0
布尔-->数字
1.true转成1
2.false转成0
Null-->数字0
Undefined-->数字 NaN
方式二:专门用于字符串转换为Number
parseInt()
把一个字符串转换为一个整数(可利用其间接对小数取整)
将一个字符串中有效的(只要读到一个不是数字后面的全算无效,且只会取整数部分)整数内容取出来后转换为Number
可以在parseInt()中传递第二个参数,来指定数字的进制
a = "070";
//像“070”这种字符串,不同浏览器会当成10进制或8进制解析
a = parseInt(a,10);//传递的第二个参数
console.log(typeof a);
console.log(a);
//"number"
"70"
parseFloat()
把一个字符串转换为一个浮点数
作用和上个类似,但是它可以获得有效的小数
a = "123.456px";
a = parseInt(a);
console.log(typeof a);
console.log(a);
//"number"
"123"
a = "123.456px";
a = parseFloat(a);
console.log(typeof a);
console.log(a);
//"number"
"123.456"
如果对非String使用parseInt()或parseFloat(),会先将其转换为String然后再操作。
方式三:隐式类型转换
为一个值 -0 *1 /1 来将其转换为Number
原理和Number()函数一样,使用起来比较渐变
3.4.3 转换为Boolean
将其他数据类型转换为Boolean,使用Boolean()函数
调用Boolean()函数将变量转换为布尔值
转换情况:数字-->布尔
除了0和NaN,其余的都是true
字符串-->布尔
除了空串,其余的都是true
null和undefined都会转换为false
对象也会转换为true
var a = Infinity;
a = Boolean(a);
console.log(typeof a);
console.log(a);
//"boolean"
"true"
3.5 其他进制的数字
要表示16进制的数字,需要以0x开头
要表示8进制的数字,需要以0开头
要表示2进制的数字,需要以0b开头(不是所有浏览器都支持)
3.6 运算符(操作符)
通过运算符可以对一个或多个值进行运算,并获取运算结果
比如:typeof就是运算符,可以来获得一个值的类型,会将该值的类型(number string boolean undefined object)以字符串的形式返回
3.6.1 算术运算符(+ - * / %)(二元运算符)
算数运算符不对原变量有影响
当对非Number类型的值进行运算(- / *)时,会将这些值转换为Number再运算(除了加法中字符串相加的情况),可以利用这个特点做隐式类型转换,通过为一个值 -0 *1 /1来将其转换为Number
任何值与NaN进行运算都得NaN
如果对两个字符串进行加法运算,则会做拼串,将两个字符串拼接为一个字符串,并返回
因为在JavaScript中双引号要在同一行,所以写一些比较长的字符串时可以使用加号来拼起来,就可以换行了。
任何值(包括数字)和字符串做加法运算,都会先转换为字符串,再和字符串做拼串的操作。同时可以利用这个特点(隐式的类型转换),将一个任意的数据类型转换为String:任意的数据类型+一个""即可将其转换为String【实际上也是调用了String()函数】
任何值做- * /运算时都会自动转换为Number,可以利用这一特点做隐式的类型转换,通过为一个值 -0 *1 /1来将其转换为Number,原理和Number()函数一样,但使用起来更简单。
var c = 123;
c = c + "";
console.log("c = "+c);
//c = 123
一个小例子:(注意运算顺序)
result = 1 + 2 + "3";//33
result = "1" + 2 + 3;//123
result = true + 1;//2
result = true + false;//1(相当于1 + 0)
result = 2 + null;//2(null为0)
result = 2 + NAN;//NAN
result = "123" + "456";//123456
result = true + "hello";//truehello
result = 100 - "1";//99
result = 2 * "8";//16
3.6.2 一元运算符
一元运算符:只需要一个操作数
+(正号,不会对数字产生任何影响) -(负号,对数字进行符号取反)
对于非Number类型的值,会先转换成Number再进行计算。所以可以对一个其他的数据类型使用+来将其转换为Number,原理和Number()函数一样,但使用起来更简单。
var result = 1 + +"2" + 3;
console.log(result);//6
//+可以将任意数据类型转换为Number
3.6.3 自增和自减
自增(++):通过自增可以使变量在自身的基础上增加1;对于一个变量自增以后,原变量的值会立即自增1
相同点:++在后(a++)和++在前(++a),都会立即使原变量的值自增1
不同点:不同的是a++和++a的值不同,a++的值等于原变量的值(自增前的值)/ ++a的值等于新值(自增后的值)
var d = 20;
console.log(++d); // 21(在20的基础上自增)
console.log(++d); // 22(在21的基础上自增)
var c = 20;
// 20 + 22 + 22
var result = d++ + ++d + d;
console.log("result = "+ result);
\