保存对代码的热爱,并保存怀疑态度
isNAN 是不是nan,自带隐式转化,如果是“123”,会自动转换为123,结果就是false
js的三大数据类型
undefined
NaN
null
NaN不等于 null,undefined包括他自己
underfined 等于mull
三等于=不等
null加+1=1
undefined+1=NaN
// 非严格模式下,不写声明关键字,直接给不存在的变量赋值
会自动将变量声明到顶层作用域(全局作用域)(但这是不规范的写法,不要使用)
递归:
在一个函数的内部,执行自己
特点
- 占内存
- 低版本浏览器中会造成内存泄漏
- 编程思路,可以利用递归的思想,解决问题
- 代码非常简洁
递归解决问题的思想
- 递:向内执行
- 归:向外结束
有来有回,return;
-
概念
-
在一个函数的内部,执行自己
function fn(){ console.log(1) fn(); console.log(2) } fn();
-
-
特点
- 占内存
- 低版本浏览器中会造成内存泄漏
- 编程思路,可以利用递归的思想,解决问题
- 代码非常简洁
递归解决问题的思想
-
递:向内执行
-
归:向外结束
-
电影院中,找座位
- 公式:fn(n) = fn(n-1) + 1
- 递的终点,归的起点:fn(1) = 1
function fn(n){ if(n === 1){ return 1 //第一位的话之间返回 }else{ return fn(n-1) + 1; //前一位加现在这一位 } } fn(5);
-
n*...*3*2*1
- 公式:fn(n) = fn(n-1) * n
- 终点:fn(1) = 1;
function fn(n){ if(n === 1){ return 1; }else{ return fn(n-1) * n; } } fn(4);
-
1,1,2,3,5,8,13,21...
,计算第n位的数字- 公式:fn(n) = fn(n-1) + fn(n-2) //前一位加再前一位
- 终点:fn(1) = 1; fn(2) = 1;
function fn(n){ if(n === 1 || n === 2){ return 1; }else{ return fn(n-1) + fn(n-2); } } fn(7);
数组的创建
字面量创建
var arr=[3];
构造函数 通过new Array 来创建
var arr=new Arraty(12); 构造函数里放单个数字的时候表示这个数组的长度
var arr=new Arraty(11,1,12);
☆任何两个对象都不相等(就算两个对象的值一样也不会相等),只要两个对象相等了,这两个对象是同一个
// 内置函数,也是一种特殊的对象
// Array()
// String()
// Number()
// Boolean()
// Object()
// Function()
字面量函数的增删改查
索引加长度
增(向后增)
// var li=arr.length;
// arr[li]=“hello”;
// console.log(arr);
可以定一个变量然后把数组的长度放进去,然后增加值
// var li=arr.length;
// arr[li]=“hello”;
// console.log(arr);
或者可以直接数组加第几位直接放入(可以跳着来);如果放入已经被占有的索引会将其覆盖
arr[8]=“word”;
console.log(arr);
删
arr.length=5(保留几位)
console.log(arr.length);
console.log(arr);
改
arr[1] = “hello”;
直接数组第几位重新赋值就可以了
查询
就直接正常查
// console.log(arr[0])
// console.log(arr[1])
// console.log(arr[2])
// console.log(arr[0]);
// console.log(arr[arr.length-1]);
// for(var i=0;i<arr.length;i++){
// console.log(arr[i]);
// }
console.log(arr);
数组方法
方法名 对应版本 功能 原数组是否改变
concat() ES5- 合并数组,并返回合并之后的数据 n
join() ES5- 使用分隔符,将数组转为字符串并返回 n
pop() ES5- 删除最后一位,并返回删除的数据 y
shift() ES5- 删除第一位,并返回删除的数据 y
unshift() ES5- 在第一位新增一或多个数据,返回长度 y
push() ES5- 在最后一位新增一或多个数据,返回长度 y
reverse() ES5- 反转数组,返回结果 y
slice() ES5- 截取指定位置的数组,并返回 n
sort() ES5- 排序(字符规则),返回结果 y
splice() ES5- 删除指定位置,并替换,返回删除的数据 y
toString() ES5- 直接转为字符串,并返回 n
valueOf() ES5- 返回数组对象的原始值 n
方法要关注的内容有:功能,参数,返回值,是否改变原数据
// arr.push()
// 功能:末尾新增
// 参数:要新增的数据
// 返回值:新增之后的数组的长度
// 是否改变原数组:是
// var res = arr.push("hello","world");
// console.log(res);
// arr.pop()
// 参数:无
功能:末尾删去,一个pop表示一个索引删去
参数:无
返回值:删除的值
是否改变原数组:是
// var res = arr.pop();
// var res = arr.pop();
// var res = arr.pop();
// var res = arr.pop();
// console.log(res)
arr.shift()
功能 数组最前面(也就是从前往后删除)删去,一个shift表示一个索引删去
参数:无
返回值:删除的值
是否改变原数组:是
// arr.shift(3);
// var res = arr.shift();
// var res = arr.shift();
// var res = arr.shift();
// console.log(res);
arr.unshift();
// arr.unshift();
// var res = arr.unshift("hello","world");
// console.log(arr)
// console.log(res);
功能 数组最前面(也就是从前往后新增,一个shift表示一个索引;
参数:新增的值
返回值:新增后的数组的长度
是否改变原数组:是
// arr.splice();
// 功能:删除并替换
// 参数:
第一个参数:要删除数据的起点索引,必传
第二个参数:删除的数据的个数,可选
第三个参数:在删除的位置插入数据,可选
...:删除的位置要插入数据,可选
返回值:删除的个数,没有删除返回空数组;
是否改变原数组:是
// arr.splice();
// var xc= arr.splice(3,3,"新来的");
// console.log(arr);
// console.log(xc);
// 灵活运用,表示从第三个开始新增,删除0个
// var vc=arr.splice(3,0,"sdfdhufshushf");
// console.log(arr);
// console.log(vc)
arr.sort(function(){
return a-b;
})
var arr2 = [23,65,13,146,9,78];
console.log(arr2)
// 功能:排序,默认排序规则:字符的排序规则,逐位比较
// 参数:
// 函数
// 这个函数又接收了两个参数
// 这个函数需要有返回值
// 返回值是两个参数之差
方法的返回值:排序后的数组;
是否改变原数组:是
var xc=arr.sort(function(a,b){
return a-b;
});
console.log(xc);
console.log(arr)
.reverse()
功能:颠倒数组中元素的顺序;
参数:无;
方法的返回值:颠倒后的数组;
是否改变原数组:是
toString()
功能:转换成字符串,类似于没有参数的join()。
该方法会在数据发生隐式类型转换时被自动调用,如果手动调用,就是直接转为字符串。;
参数:无;
方法的返回值:转换后数组;
是否改变原数组:否
valueOf()
功能:返回数组的原始值(一般情况下其实就是数组自身
一般由js在后台调用,并不显式的出现在代码中;
参数:无;
方法的返回值:本身;
是否改变原数组:否
// arr.slice();
// 功能:截取指定位置的数据
// 参数:
// 参数1:起点
// 参数2:终点(不包括)
// 返回值:截取出的新数组
// 是否改变原数组:否
var res = arr.slice(2,5);
console.log(res);
arr.concat()
功能:连接两个数组;
参数:要连接的数组名;
方法的返回值:连接后 的数组;
是否改变原数组:否
var xc=arr.concat(arr1);
console.log(xc);
console.log(arr);
arr.join()
功能:根据指定分隔符将数组中的所有元素放入一个字符串,并返回这个字符串。
参数:join(str);参数可选,默认为","号,以传入的字符作为分隔符。;
方法的返回值:改变后的数组(是字符串类型);
是否改变原数组:否
var arr = [1,2,3];
console.log(arr.join()); //1,2,3
console.log(arr.join("lo")); //1-2-3
console.log(arr); //[1,2,3]---原数组未改变