变量
数字蓝色 字符串黑色/红色
类型判断 typeof
正常数值判断 isFinite
短路操作
短路与 && 假返回本身 如果左边为真 返回右边 如果左边为假 返回左边本身 (本身空对象 为假 不赋值 真的话返回右边给他赋值)
短路或 || 如果左边为假 返回右边 如果左边为真 返回左边本身
真 && 假 ||真 真
假 真
真 真
异或运算
二进制每一位数进行对比 相同返回0不同返回1
类型转换
字符
.to string()
String()
数字
Nunber()
.parseInt()
.parseFloat()
布尔
Boolean()
除了‘ ’ 0 false undefined null Nan是false 其他都是true
underfined 默认转换为Nan false转换成0 null转为0
NaN和任何值进行对比都为false !!NaN等于false
console.log()控制台打印 doucument.write()浏览器窗口打印
if else ,switch ,三目运算,while,for
if
if () {
console.log()
} else if (){
} else {
}
switch
switch(){
case:
console.log()
break;
case:
console.log();
break;
default:
console.log();
break;
}
三目条件
条件?成立输出 : 不成立输出;
while
while(条件){
}
for
for(var a=1;a<10; a++;){
}
alert , prompt , confirm , write
alret 弹窗
prompt 输入框
confirm 弹窗询问 返回布尔值
document.write(0) 浏览器窗口打印
continue break
break 跳出整个循环
continue 跳出当前循环
数组
new 关键字 实例化
var ab = new Array();
var ab = [1,2,3,4,5];
数组可以修改长度 修改数组中的值
for in 遍历数组 (有可能乱序)为数组下标 for (var ab in 数组名)
for of 遍历数组 只能获取数组的值 for (var ab of 数组名)
要取数组中不存在的值 不存在的值默认属性为undefined
Array.isArray()判断数组
数组本身不相等(即使里面数值相等)每个值都是唯一的 索引是唯一的
可以对数组内的值进行对比
数组单项数值 转换为数值 如果是字符转换成nan
是多项 转换成Nan
空数组转换为true
join
拼接
将数组转换成字符串 null undefined 转换成空字符
数组名.join("这里放你要连接字符的字符")
push
往数组最后添加
数组名.push()
返回值为数组长度
unshift
往数组前面添加
和push一个用法
pop
删除最后一个
从数组后面删
shift
从数组前面删
slice
切割
var new = old.slice() 浅拷贝 直接将old数组里面的值切割过来 这连个数组是完全不同的数组
concat
拼接
进行数组间的拼接
var new = old.concat() 浅拷贝
indexof
索引 查找数组中元素所在位置 返回元素下标 如果元素不存在返回-1
数组名.indexof(“123”,1(从下标为1的值后面开始查找));
技巧
判断数组里面值类型
typeof 数组[i] === "你要判断的类型"
整数= 能被一整除 数%1===0
~~ 转换成数字类型 不是number会转换为0
将转换完的数 与 没转换时的数进行对比 如果是false 则不为整数
冒泡排序(从小到大)
var arr = [4,3,5,2,1,7,6,9,8,];
var len = arr.length;
var temp;
for (var i = 0;i < len;i++){
\\相邻两个数进行比较交换
for (var j = 0;j < len-1-i;j++){
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
先进行相邻两个数之的比较 比较大的对比较小的进行交换 然后进行循环
选择排序
var arr = [4,3,5,2,1,7,6,9,8,];
var len = arr.length;
var minidx = 0;
var temp;
for (var i = 0;i < len;i++){
minidx = i;
for (var j = i+1;j < len;j++){
if (arr[j] <arr[minidx]){
minidx = j;
}
}
temp = arr[i];
arr[i] = arr[minidx];
arr[minidx] = temp;
}
console.log(arr);
让数跟下一个数进行对比 如果比他小 下标进行交换 然后将小的数跟最前面的数进行交换 进行循环
插入排序
选一个数 这个数会对之前的数进行对比 排在比自己小后面在比自己打大前面
字符串方法
chatAt()
从字符串中返回相应数值
var a=“abcdefg”
console.log(a.charAt(1)) //b
超出范围返回空字符
indexof
返回下标
split
类似拼接
slice
切割
str.slice(3)从下标为3的地方开始切割 包括起不包括结束
trime
从一个字符串的两端删除空白字符
函数
函数声明
function 函数名(形参){}
表达式声明
var 函数名=function(){}
函数名();直接调用
var c= 函数名(实参)
不传参 默认值undefined
函数内部代码执行到return就结束
参数不限数 参数可以是任意类型
arguments 不定参列表
是函数的实参(用户传的参数)列表 集合 类数组
作用域
只有函数有局部域
函数中的数如果有声明 就把他提升到这个作用域最顶端 再进行解析
先找声明 进行提升 在解析
先提升变量 再提升函数
变量提升的时候 赋值并没有跟着提升
传参进来后 参数作为局部变量
对象
属性(特征) 方法(行为)
内置对象
-
number
-
array
-
Boolean
-
string
-
object
-
function
-
date
-
math
-
null
-
regexp 正则对象
字面量创建
创建对象
var 对象名 = new object();
对象名.属性名="";
或者
var 对象名 ={
属性名: "",
属性名: ""
}
构造函数
构造函数不是对象
首字母是大写的 用this关键字 生成对象用new来调用构造函数
function 构造函数名( 属性名,属性名){
this.属性名:”属性值“;
}
var 函数名=new 构造函数名(属性名,属性名);
delate.对象名.属性名;
函数中的this 是在哪个地方调用 this就指向谁
instanceof
object instanceof constructor
object
要测试的对象。
constructor
要测试的功能
返回布尔值
var x = 1;//字面量
//var xobj =new Number(1);
//xobj = null;
var x = new Number(1); 构造函数
区别 用字面量的时候 会隐性 创建构造函数 用完之后会销毁 所以你不能对他判断
Json
键名用双引号包括
json序列化
JSON.stringify(对象名) 将数据(对象)序列化 变成字符串
反序列化
JSON.parse() 将字符串还原成数据(对象)
总结
基础类型和对象类型
-
null undefined string number boolean
-
array object
-
function
基础内置对象
-
String Number Boolean Array Function Object Null Regexp Date Math Json Error Arguments
执行上下文
生命周期
-
创建阶段
-
执行阶段
-
回收阶段
this
谁调用函数 函数里的this就指向谁
自调用函数(匿名函数)里的this 都指向Windows
执行栈
JavaScript是单线程
object方法
Object.is(a,b)
判断两个值是否为一个值
对象和对象不相等 每个对象都有自己的地址
Object.freeze(需要冻结的对象)
冻结对象 不允许修改对象里面的值(任何操作都不行)
Object.assign
拼接对象
要定义一个值来放拼接数据
var c = object.assign(a,b);//a,b为拼接对象 后面返回a对象 也是拼接完成后的
a为目标对象 b为拼接对象 对象内有属性冲突 会进行覆盖 后面的会覆盖前面的
object.key
Array方法
forEach
对数组的每个元素执行一次给定的函数
数组名.forEach(function(current,index,array)){
}
foreach 的参数是个回调函数 callback
callback会返回三个值 current index array
current 数组处理的当前元素
index 处理当前元素的索引(可选)
array foreach 方法正在操作的数组(可选)
sort()
对数组里的元素进行排序并返回字符串
默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的
按照数组元素内的首元素进行解析
数组名.sort(function(a,b){return b-a
})降序排列(a-b
升序默认)
map()
方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
fliter()
根据指定条件过滤数组
reduce()
归并
方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
arr.reduce(function(acc,current[,indexz[,array]])[,thisArg]){,{初始值}}
acc 累计器累计回调的返回值; 它是上一次调用回调时返回的累积值或函数累计处理的结果
lastindexof()
反向查询
方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex
处开始。
reverse()
倒转数组
修改原数组 返回值也是原数组
splice()
按照下标进行替换或删除 替换内容可以是多个值
splice(从哪个的地方开始,所要截取的个数,替换内容)
includes()
用来判断一个数组是否包含一个指定的值 返回boole值
判断是按===来判断的
var a=[z,d,f,g,h]
console.log(a.includes(d,从哪开始寻找))
flat()
将一个数组降维 返回值为降维后的数组 不改变原数组
var arr = [1,[2,[3]],4] var newArray = arr.flat([depth]) depth(维度) 可选 指定要提取嵌套数组的结构深度,默认值为 1。
some()
判断数组中有没有符合条件的数值
evetry()
判断数组符不符合条件(整个数组中的每一项)
String方法
charCodeAt()
将字符转换成Unicode编码
replace()
方法返回一个由替换值(replacement
)替换部分或所有的模式(pattern
)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern
是字符串,则仅替换第一个匹配项。
substr(从几位开始,总共几位)
substring(从几位开始,到几位结束)
数组去重 十八天00 数据处理之后重新看学四节
递归
在函数内重复使用函数
math
Math.random()
取随机数//范围 (0,1]
取值0-100 Math.random()*100
取值3-100 Math.random()*97 + 3
取值-20-100 Math.random()*120 - 20
Math.round()
函数返回一个数字四舍五入后最接近的整数
Math.round(20.49) //20Math.round(20.5) //21Math.round(-20.5) //-20Math.round(-20.51) //-21
Math.floor()
返回小于或等一个给定数字的最大整数:向下取整
Math.floor(x);
Math.floor( 45.95); // 45 Math.floor( 45.05); // 45 Math.floor( 4 ); // 4 Math.floor(-45.05); // -46 Math.floor(-45.95); // -46
/* 与 ~~ 去除小数位有区别 */~~(-45.95) //-45
Math.ceil()
返回大于或等于一个给定数字的最小整数
汇总
Math.PI // 圆周率
Math.random() // 生成随机数
Math.floor()/Math.ceil() // 向下取整/向上取整
Math.round() // 取整,四舍五入
Math.abs() // 绝对值
Math.max()/Math.min() // 求最大和最小值
Math.sin()/Math.cos() // 正弦/余弦
Math.power()/Math.sqrt() // 求指数次幂/求平方根
Date
// 获取当前时间,UTC世界时间,距1970年1月1日(世界标准时间)起的毫秒数var now = new Date();console.log(now.valueOf()); // 获取距1970年1月1日(世界标准时间)起的毫秒数