JavaScript学习笔记3
1.输入输出语句
| 方法 | 说明 | 归属 |
|---|---|---|
| alert(msg) | 浏览器弹出警示框 | 浏览器 |
| console.log(msg) | 浏览器控制台打印输出信息 | 浏览器 |
| prompt(info) | 浏览器弹出输入框,用户可以进行输入 | 浏览器 |
2.声明变量的特殊情况
| 情况 | 说明 | 结果 |
|---|---|---|
| var age; console.log(age); | 只声明,不赋值 | undefined |
| console.log(age) | 不声明,不赋值,直接使用 | 报错 |
| age = 10;console.log(age); | 不声明,只赋值 | 10 |
3.数据类型
- js的变量数据类型是程序运行过程中,根据等号右边的值来确定的。
- js是动态语言,变量的数据类型是可以变化的。
1 | |
简单数据类型(Number,String,Boolean,Undefined,Null)
1.Js中八进制前面加0,十六进制前面加0x。
2.isNaN(),用来判断变量是否为非数字类型,如果是数字返回false,如果不是数字返回的是true。
3.字符串转义符
转义符 解释说明 \n 换行符 \\ 斜杠\ \‘ ’单引号 \\“ “双引号 \t tab缩进 \b 空格 4.检测获取字符串的长度,str.length
5.字符串的拼接
字符串+任何类型=拼接之后的新字符串
1
2console.log(12+12);//14
console.log('12'+12);//12126.布尔型和数字型相加的时候,true的值为1,false的值为0。
7.一个声明后没有被赋值的变量会有一个默认值undefind
一个声明后被赋值为null的变量,里边的存值为空
1
2
3
4console.log(undefined + 'pink');//undefinedpink
console.log(undefined + 1);//NaN undefined和数字相加,最后结果是NaN
console.log(null + 'pink');//nullpink
console.log(null + 1);//1 null和数字相加,最后结果是数字8.prompt取过来的值是字符型的,可以使用typeof检测变量数据类型。
9.数据类型转换
转换为字符串类型
方式 说明 案例 toString() 转成字符串 var num =1;console.log(num.toString()); String()强制转换 转成字符串 var num =1;console.log(String(num)); 加号拼接字符串 和字符串拼接的结果都是字符串 var num = 1;console.log(num+’我是字符串’); 转换为数字型
方式 说明 案例 parseInt(string)函数 将string类型转成整数数值型 parseInt(‘78’) parseFloat(string)函数 将string类型转成浮点数数值型 parseFloat(‘1.23’) Number()强制转换 将string类型转换为数值型 Number(‘11’) js隐式转换(- * /) 利用算数运算隐式转换为数值型 ‘12’-0 转换为布尔型
方式 说明 案例 Boolean()函数 其他类型转换成布尔型 Boolean(‘true’); 代表空、否定的值会被转换为false,如’’、0、NaN、null、undefined;其余值都会被转换为true。
复杂数据类型(Object)
通过new关键字创建的对象(系统对象,自定义对象),如Object、Array、Date等。
简单数据类型存放在栈里面,复杂数据类型存放在堆中(先在栈里面存放地址,然后这个地址指向堆里面的数据)
10.算术运算符
前置递增和后置递增区别
后置:先原值计算,后自加
前置:先自加,后运算。
1 | |
11.比较运算符
| 符号 | 作用 | 用法 |
|---|---|---|
| = | 赋值 | 把右边给左边 |
| == | 判断 | 判断两边值是否相等(此时有隐式类型转换) |
| === | 全等 | 判断两边的值和数据类型是否完全相等 |
12.逻辑运算符
| 符号 | 说明 | 案例 |
|---|---|---|
| && | 逻辑与 and | true&&false |
| || | 逻辑或 or | true||false |
| ! | 逻辑非 | !true |
- 逻辑与短路运算
1 | |
- 逻辑或短路运算
1 | |
13.运算符优先级
| 优先级 | 运算符 | 顺序 |
|---|---|---|
| 1 | 小括号 | () |
| 2 | 一元运算符 | ++ – ! |
| 3 | 算术运算符 | 先*/%后+- |
| 4 | 关系运算符 | > >= < <= |
| 5 | 相等运算符 | == != === !== |
| 6 | 逻辑运算符 | 先&&后|| |
| 7 | 赋值运算符 | = |
| 8 | 逗号运算符 | , |
4.流程控制
流程控制主要有三种结构,分别是顺序结构、分支结构(if-else if语句、switch)和循环结构。
**1.if语句**
1 | |
2.三元表达式
语法结构:条件表达式 ? 表达式1 : 表达式2
如果条件表达式结果为真 则 返回表达式1 的值,如果条件表达式结果为假 则返回表达式2 的值。
1 | |
3.switch语句
switch语句也是多分支语句,它用于基于不同的条件来执行不同的代码。当要针对变量设置一系列的特定值的选项时,就可以使用switch。
1 | |
1 | |
4.switch语句和if else if语句的区别
- switch…case语句通常处理case为比较确定值的情况,而if…else..语句更加灵活,常用于范围判断。
- switch语句进行条件判断后直接执行到程序的条件语句,效率更高。而if…else语句有几种条件,就得判断多少次。
- 当分支较少时,if…else语句的执行效率比switch语句高。
- 当分支较多时,switch语句的执行效率比较高,而且结构清晰。
5.循环结构
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
- while和do…while可以做更复杂的判断条件,比for循环灵活一些
- while和do…while执行顺序不一样,while先判断后执行,do…while先执行一次,在判断执行。
- while和do…while执行次数不一样,while可能一次也不执行,do…while至少执行一次。
continue和break
continue关键字用于立即跳出本次循环,继续下一次循环。
1 | |
break关键字用于立即跳出整个循环体
1 | |
6.数组(Array)
数组的两种创建方式
利用new创建数组
1
var arr = new Array(); //创建一个空的数组利用数组字面量创建数组
1
var arr = [1,2,3,4]
访问数组元素
数组可以通过索引来访问、设置、修改对应的数组元素,我们可以通过“数组名【索引】”的形式来获取数组中的元素。
遍历数组
1
2
3
4
5//遍历数组
var arr = [1,22,3,4,5,6,77]
for (var i = 0; i < arr.length; i++ ) {
console.log(arr[i])
}求最大值
1
2
3
4
5
6
7
8var array = [12,13,445,67,888,98];
var max = array[0];
for (let i = 0; i < array.length; i++) {
if(array[i] > max){
max = array[i];
}
}
alert('数组'+array+'的最大值为:'+max)
- 数组转换为分割字符串
1 | |
6.数组中新增元素
通过修改length长度新增数组元素
1
2
3
4
5
6
7
8var array = [1,2,33,4,]
array.length = 6;
console.log(array);// [1, 2, 33, 4, empty × 2]
console.log(array[4]);// undefined
console.log(array[5]);// undefined
array[4] = 7;
array[5] = 6;
console.log(array);// (6) [1, 2, 33, 4, 7, 6]通过修改数组索引新增数组元素
1 | |
- 数组练习
1 | |
1 | |
1 | |
1 | |
1 | |
7.函数
函数:就是封装了一段可被重复调用执行的代码块。
1 | |
函数形参和实参匹配问题
1 | |
函数练习
1 | |
函数返回值注意事项
- 如果函数没有return,则返回undefined。
- break,continue,return的区别
continue关键字用于立即跳出本次循环,继续下一次循环。(for、while)
break关键字用于立即跳出整个循环体(for、while)
return关键字不仅可以退出循环,还能够返回return语句中的值,同时还可以结束当前的函数体内的代码。
arguments的使用
当我们不确定有多少个参数传递的时候,可以用arguments来获取。在Javascript中,arguments实际上它是当前函数的一个内置对象。所有的函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
arguments展示形式是一个伪数组,因此可以进行遍历。伪数组具有以下特点:
具有length属性
按索引方式存储数据
不具有数组的push、pop等方法
可以按照数组的方式遍历arguments
1
2
3
4function fn(){
console.log(arguments)//里面存储了所有传递过来的实参
}
fn(1,2,3)1
2
3
4
5
6
7
8
9
10
11
12
13
//arguments的使用 利用函数求任意个数的最大值
function setMax(){
var Max = arguments[0];
for (let index = 0; index < arguments.length; index++) {
if(arguments[index] > Max){
Max = arguments[index]
}
}
return Max
}
var getMax = setMax(129,222,444,5,5,66666,7777,99999)
console.log(getMax )函数的两种声明方式
1.利用函数关键字自定义函数(命名函数)
1 | |
2.函数表达式(匿名函数)
1 | |
8.作用域(es6)之前
- 全局作用域(整个script标签或者是一个单独的js文件)
- 局部作用域(在函数内部就是局部作用域,只在函数内部起作用和效果)
- 全局变量(在全局作用域下的变量,如果在函数内部没有声明,直接赋值的变量也属于全局变量)
- 局部变量(在局部作用域下的变量,只能在函数内部使用;函数的形参也可以看作局部变量)
- 全局变量只有在浏览器关闭的时候才会销毁,比较占内存
- 局部变量当我们的程序执行完毕就会销毁,比较节约资源
作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值,这种结构我们成为作用域链。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!