2019年7月15日22:16:40 开始学习JavaScript。

 

资源:bilibili/av34087791。

基础语法

JavaScript的位置

  • 在body前,放在script中。

<script type=“text/javascript”>
/* js代码; */
</script>

  • 在body内,可放在标签的属性中。

如button的 οnclick=“alert(‘点击button响应字符串同时信息’)”
如超链接中 href=“javascript:alert(‘字符串’)”

虽然可以写在标签的属性中,但是不方便维护;因此可以将js代码写在tittle中或外部js文件中

  • 外部js文件,通过script标签引入。

<script type=“text/javascript” scr=“js/script.js”> (中间无需写代码,写也会被忽略) </script>

预前知识

注释

/*
多行注释
*/

//单行注释

原则

1.JS严格区分大小写;
2.JS中每一条语句以分号(;)结尾;
3.JS忽略多个空格和换行

字面量、变量、标识符

字面量是一些不可改变的值,比如1 2 3 4 5;但一般不直接使用字面量。

变量可以改变值,用变量保存字面量的值。使用var声明一个变量。

var a;

a = 123;

var a = 456;

标识符是JS中可以自主命名的东西。例如:变量名、函数名、属性名。标识符中可以含有字母、数字、_、$。标识符不能以数字开头。标识符不能是ES中的关键字或保留字。

标识符一般采用驼峰命名法。

  • 首字母小写,每个单词开头字母大写,其余字母小写,如helloWorld。

  • JS底层保存标识符时实际上采用的是Unicode编码,所以理论上讲,所有的utf-8中含有的内容都可以作为标识符。

Unicode编码

console.log("\u0031")

  • \u + 十六进制。

在网页中,是 &# + 十进制。

数据类型

数据类型就是字面量的类型。

基本数据类型:

  • String
  • Number
  • Boolean
  • Null
  • Undefined

引用数据类型:

  • Object

字符串

var str = “hello”;

使用 \ 进行转义。

可以使用typeof检测变量的类型。

console.log(typeof a);

数值

Number包括整数和浮点数。

Number.MAX_VALUE

如果数值超过Number.MAX_VALUE时,会返回Infinity。类型是number。

NAN

NAN表示not a number,类型是number。

Number.MIN_VALUE

返回最小值,能表示的最小的正小数。

  • 如果使用JS进行浮点运算,可能得到一个不精确的结果;所以千万不要使用JS进行对精确度要求比较高的运算。

布尔值

只有true与false两个值。

var bool = true;

NULL

NULL只用一个值null。

var a = null;

NULL专门用来空的对象。

使用typeof返回null值时,会返回’object’。

UNDEFINED

声明了没赋值的变量。

var a;

var b = undefined;

使用typeof,会返回’undefined’。

强制转换String

  • 方式一:toString()方法。

注意,null、undefined没有toString()方法。

a = a.toString();

  • 方式二:String()函数。

注意,对于number和boolean,就是调用toString()。

a = null;
a = String(a);

强制转换Number

  • 方式一:Number()函数。

注意,字符串转数字:

  1. 纯数字字符串正常;
  2. 如果有非数字内容,转换为NaN;
  3. 如果字符串是一个空串或者全是空格,则转换为0;
  4. 对于Boolean,true转为1,false转为0;
  5. 对于null,转为0;
  6. 对于undefined,转为NaN。
  • 方式二:parseInt()、parseFloat(),专门用来对付字符串。

a = “123px”;
a = parseInt(a);
b = “456.789”;
b = parseInt(b);

a = 123 b= 456

c = “123.456.789”;
c = parseFloat©;

c = 123.456

其他进制数字

16进制,0x开头。

a = 0x10;

a = 0xCafe;

输出是都会转换成十进制输出。

8进制,0开头。

b = 070;

2进制,0b开头,但不是所有浏览器都支持。

c = 0b11;

parseInt(对象,参数1),参数1指定进制数。

parseInt(a, 10);

强制转换Boolean

Boolean()函数。

  • 数字除了0和NaN,其余都是true;
  • 字符串除了空串,其余都是true;
  • null和undefined都是false。

运算符

算数运算符

  • 对于Number和非Number的运算,转换为Number后运算。(除了字符串加法)
+

var a = “锄禾日当午”+
“汗滴禾下土”;

任何值和字符串加法运算,都会转换成字符串。并进行拼串。

result = 1;
console.log("result = " + result);

因此可以进行隐式数据转换,转换为String。

var c = null;
c = c + “”;

- * / %

只有+是转为字符串,其余的运算符都是转为Number。

var result = 100 - “1”;

因此可以进行隐式数据转换,转换为Number。

var c = “123” - 0;

%是取余数。

一元运算符

只需要一个操作数。

+ -

正好对数字无影响,负号取反。负号对于非Number,先转为Number。

a = true;
a = -a;

则,a = -1

自增和自减

a++;
++a;

逻辑运算符

布尔值运算

!、&&与||。

a = !a;

var b = true && true;

var c = true || false;

注意这里的短路功能。

非布尔值与或运算

对于非布尔值运算,先将其转换为布尔值,并返回原值。

var result = 2 && 4;

则* result = 4 *。

  • 与运算,如果两个值都为true,则返回后边的。

  • 与运算,如果两个值都为false,则返回前边的。

  • 这与短路的思维有关。如果第一个值为true,则返回第二个值;如果第一个值为false,则返回第一个值。

  • 如果第一个值为true,则直接返回第一个值。

  • 如果第一个值为false,则直接返回第二个值。

result = “” || “hello”;

则,* result = “hello” *。

赋值运算符

a = 5;
a += 5;
a -= 5;
a *= 5;
a /= 5;
a %= 5;

关系运算符

> <
>= <=

  • 任何值和NaN进行比较,都是false。

  • 如果两边都是字符串,则不会转换为数字,而比较字符的Unicode编码。

  • 注意,在比较字符串的数字时,一定要转型

相等运算符

==

  • 当使用两个类型时,会自动进行类型转换。

  • NaN不和任何值相等,包括它本身。

  • 可以通过isNaN()函数来判断是否为NaN。

!=

会自动进行类型转换。

===

全等,类型不同,直接返回false。

!==

不全等,与!=类似,但不会进行自动的类型转换。类型不等,直接返回true。

条件运算符

条件表达式?语句1:语句2;

运算符的优先级

var a, b, c;

优先级一样,则从左往右。

语句与代码块

在JS中可以使用{}来为语句进行分组,{}中的整体叫做代码块。

流程控制语句

  • 条件判断语句
  • 条件分支语句
  • 循环语句
if

if(条件表达式){

}

if(条件表达式){

}else{

}

if(条件表达式){

}else if(条件表达式){

}else{

}

switch

switch(表达式){
case 表达式1:
break;
case 表达式2:
break;
}

while

while(true){}

do{}while(true);

for

for(var i = 0 ; i < 10; i++){}

break和continue
  • if中不能使用break。
  • 可以加一个标签,终止循环。

outer:
for(){
break outer;
}