JavaScript跨越门槛篇

110 阅读9分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一.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中空格用&nbsp;来表示。当表示一些特殊符号时可以使用\进行转义

" 表示"
' 表示'
\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);

\