JavaScript详细知识点总结1

js基础

Javascript是一门面向对象的,跨平台脚本语言

变量

声明

变量命名见名知义,驼峰命名,不要跟关键字冲突

var str = 'hello'
var userName = 'zhangsan'

类型

js本身是弱类型,但是计算机内部还是会区分每一种数据类型

五(六)种基本数据类型:number、string、boolean、undefined、null、(symbol)

两种引用类型:object、function

一个关键字 typeof typeof返回有六种值: number、string、boolean、undefined、object、function

类型转换

隐式转换(+、-、*、/、%、==)
显式转换(parseInt()、parseFloat()、Number()、toString()、String()、toFixed())

NaN : Not a Number

isNaN(num)函数,该函数判断num变量的值是否是NaN,是NaN返回true,数字返回false

NaN跟任何数字去运算结果都是NaN

运算符

算数运算符

加、减、乘、除、求余/取模(+ 、- 、* 、/ 、%)

+=、-=、*=、/=、%=

++、-- 以及自增自减的前置(先算后用)后置(先用后算)

关系运算符

(相等)、=(全等) 、!=(不等于)、<(小于) 、>(大于) 、<=(小于或者等于) 、>=(大于或者等于)

逻辑运算符

&&(与)、||(或)、!(非)

逻辑短路

当第一个表达式已经能够决定整个表达式的结果了,第二个就不参与了

进制(了解)

分支

根据不同的条件判断来决定程序执行走向的结构(也叫选择结构)

if

if(true){
    
    
    //会执行的语句
}

if(false){
    
    
    //会跳过不执行的语句
}

if(判断条件){
    
     //当if括号中结果为true时执行语句1,否则执行语句2
    //语句1
}else{
    
    
    //语句2
}

if(判断条件1){
    
     //当条件1结果为true时执行语句1
    //语句1
}else if(判断条件2){
    
     //当条件1结果为false而且条件2结果为true时执行语句2
    //语句2
}else{
    
     //当条件1条件2结果都为false时执行语句3
    //语句3
}

注意:0、-0、null、""、false、undefined 或者 NaN在if条件里结果为false

switch case 多分支语句

switch(语句){
    
      //语句的结果与每一条case内容进行匹配
    case 1:
       alert(1);
	break;
	case 2:
		alert(2);
	break;
	case 3:
		alert(3);
	break;
	default:
		alert(0);
}

注意switch的应用场景(有多个确定值需要判断的时候);

case是全等匹配;

注意case穿透,要加break语句(如果程序没有发现break语句,那么解析器会继续向下解析);

循环

需要重复执行同一操作的程序结构称为循环结构。

while

while(条件){
    
    
    //条件成立就会反复执行这里的代码
}

do…while循环

do {
    
    
    //先执行一遍代码  //while条件成立再继续反复执行
} while (条件)

for

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

三种循环的联系和区别

  1. 都是会反复执行的代码块
  2. 大部分情况下可以互相替换
  3. do…while至少执行一次,while和for有可能0次,while不太能确定执行次数,for绝大部分情况下都可以确定

函数

一个工具,被封装好可重复执行的一段代码块

function test () {
    
    
    
}
var test1 = function () {
    
    
    
}
test()
test1()

参数

形参:形式参数,声明函数的时候写在小括号里面的参数,无需var

实参:实际参数,在函数调用的时候需要传递实际有值得参数 实参个数大于形参,多余实参自动舍弃 形参个数大于实参,多余形参默认为undefined

实参副本arguments:可以在函数内部使用arguments接收所传递过来的参数,是一个类数组对象

作用域:变量的作用范围

全局变量

作用范围为整个程序的执行范围 在函数体外部定义的变量就是全局变量 在函数体内部不使用var定义的也是全局变量

局部变量

作用范围是某个函数体内部 在函数体内部通过var关键字定义的变量或者形参,都是局部变量 当局部变量与全局变量重名时,在函数体内部局部变量优先于全局变量

return关键字

  1. 结束函数的执行
  2. 交回函数执行权
  3. 返回一个结果函数调用位置(如果不写返回值默认返回值是undefined)

数据结构

  • 栈:先进后出(FILO),在栈顶做插入(压栈)和删除操作(出栈)
  • 队列:先进先出(FIFO),在队头做删除操作,在队尾做插入操作
  • 堆和它们不同,代码执行时系统动态分配,不存在是先进后出还是先进先出
执行环境栈
变量生命周期
作用域链

递归

程序调用自身的编程技巧称为递归( recursion)。

递归就是在运行的过程中调用自己,本质就是循环。

构成递归需具备的条件

  1. 子问题须与原始问题为同样的事,且更为简单
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

由于递归是函数本身一层一层压栈,导致先入栈的不能出栈,空间占满以后就会造成堆栈溢出

匿名函数:没有名字的函数

自调用函数(IIFE)

Immediately Invoked Function Expression ( 立即调用函数表达式)

JS运行和编译

  1. 语法分析

    查找基本语法有没有错误预解析

  2. 执行之前进行预解析(变量提升)

    var、function关键字提前到当前作用域的顶部,变量默认值为undefined,函数默认值为函数体代码块,当函数与变量重名时,保留函数。

  3. 解释执行

对象

类是对象的抽象,对象是类的实例

js中对象的本质:属性和方法的集合

对象遍历:for…in循环(隐式迭代)

var obj= new Object();
obj.name = "zhangsan";
obj.age = 18;
obj["gender"] = "male";
for(var key in obj){
    
    
    console.log(key);
    console.log(obj[key]);
}

数组

数组:一组数据(一个变量来承载)

数组的长度 arr.length

数组的索引(下标) arr[0] ~ arr[arr.length-1]

数组遍历

  1. for循环:使用最多的一种循环
  2. for…in(ES5) 遍历稀疏数组的时候不会遍历到undefined
  3. for…of(ES6)遍历直接得到值,得不到下标

引用类型

基本数据类型:number、string、boolean、undefined、null

引用数据类型:object(array也属于object)、function

函数的值传递和引用传递

基本类型作为参数传递的是值,而引用类型作为参数传递的是引用,即地址

数组API

方法 描述
concat 连接两个或更多的数组,并返回结果
join 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔
pop 删除并返回数组的最后一个元素
push 向数组的末尾添加一个或更多元素,并返回新的长度
shift 删除并返回数组的第一个元素
unshift 向数组的开头添加一个或更多元素,并返回新的长度
reverse 颠倒数组中元素的顺序
slice 从某个已有的数组返回选定的元素
splice 删除元素,并向数组添加新元素
toString 把数组转换为字符串,并返回结果
sort 对数组的元素进行排序

sort是按ASCII码来排序的,如果想按数字大小排,可以使用

arr.sort(function (a, b) {
    
    
    // 指定规则
    // a和b是sort方法会依次去取数组里的元素
    // 如果这里的返回值大于0,那么a和b就会交换顺序,不大于0就不交换
    // return a - b // 升序
    return b - a // 降序
})

ES5新增数组常见方法

  • 2个索引方法:indexOf() 和 lastIndexOf()
  • 5个迭代方法:forEach()、map()、filter()、some()、every()
  • 2个归并方法:reduce()、reduceRight()

排序

冒泡排序

for (var i = 0; i < arr.length - 1; i++) {
    
    
    for (var j = 0; j < arr.length - i - 1; j++) {
    
    
        if (arr[j] > arr[j+1]) {
    
    
            var temp = arr[j]
            arr[j] = arr[j+1]
            arr[j+1] = temp
        }
    }
}

选择排序

for (var i = 0; i < arr.length - 1; i++) {
    
    
    var min = i
    for (var j = i + 1; j < arr.length; j++) {
    
    
        if (arr[min] > arr[j]) {
    
    
            min = j
        }
    }
    if (i != min) {
    
    
        var temp = arr[i]
        arr[i] = arr[min]
        arr[min] = temp
    }
}

另:插入排序、快速排序(了解思路)

去重

  1. 双重for循环,只留下不重复的
  2. 利用对象属性名不冲突
  3. ES6(Set是一种新的数据类型,加强版数组,默认不允许重复)

字符串

ASCII码

计算机最通用的编码标准,使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。

字符串API

方法 描述
charAt 返回在指定位置的字符
indexOf 检索字符串,返回下标
lastIndexOf 从后向前搜索字符串
charCodeAt 返回在指定的位置的字符的编码
fromCharCode 从字符编码创建一个字符串
concat 连接字符串
slice 提取字符串的片断,并在新的字符串中返回被提取的部分
split 把字符串分割为字符串数组
toLowerCase 把字符串转换为小写
toUpperCase 把字符串转换为大写
trim 去掉字符串前后空格(ES5)
replace 替换与正则表达式匹配的子串
match 找到一个或多个(正则表达式的)匹配
search 检索与正则表达式相匹配的值
substr 从起始索引号提取字符串中指定数目的字符(不推荐)
substring 提取字符串中两个指定的索引号之间的字符(不推荐)
startsWith 字符串是否以某个字符开头(ES6)
endsWith 字符串是否以某个字符结尾(ES6)
includes 字符串是否包含某个字符(ES6)
repeat 重复某个字符串几次(ES6)

内置对象

js内置的可以直接使用的对象

  1. Number
  2. String
  3. Boolean
  4. Array
  5. Object
  6. Function
  7. RegExp
  8. Error
  9. Math
  10. Date

Math

数学对象,关于数学运算的属性和方法

Math.PI // Math对象里的属性都是常量,不能被修改

Math.floor()

Math.ceil()

Math.round()

Math.pow()

Math.sqrt()

Math.abs()

Math.random()

生成一个min~max的随机数

Math.random() * (max - min) + min

Date

获取系统时间以及对日期做一些操作

获取当前日期 new Date()

时间戳:从1970年到当前日期对象总的毫秒数

获取系列API

getFullYear()

getMonth() 0~11

getDate()

getDay() 0~6星期

getHours()

getMinutes()

getSeconds()

getTime() 获取时间戳

设置系列API

获取用get系列,设置换成set即可,但是day星期几不能设置

如果设置传了超过正常日期的参数,会自动计算

转换字符串

toLocaleString() 转换为当地字符串

toUTCString() 转换为标准时区字符串

猜你喜欢

转载自blog.csdn.net/wangkingpeng/article/details/109098264