2021.3.3迷茫了一天,决定花一周时间将面试基本知识点补齐,然后去面试中小厂,工资无所谓,能收就行。(卑微

leetcode刷题


  1. 第一题:27. 移除元素

做法:

  1. 直接删掉==val的数,直接用splice(index,1)来处理
  2. 双指针,last=nums.length和index=0,如果==val的话就直接nums[last]的值给到nums[index]处再判断一次,同时last减一,遍历循环的条件是index<last;
  3. 直接覆盖。就是给定index作为!=val的数字可以存放的下标,==val的话就忽略,!=的话就写上去。

2.第二题:28. 实现 strStr()
做法:

  1. 直接硬来,关键在于定住haystack的index不动,比较的时候用index+j来比较,j是可以变化的。
  2. 用substring来做。

牛客网


var val = 12;
function fun1(){
console. log(val);
var val = 20;
console.log(val);
}
fun1();

这里的话fun1中的val是优先考虑域内的,但是虽然val提升了,还要轮到下一句的时候才能赋值20.
所以就相当于undefined


Ajax不是新的编程语言,而是一门提供网页局部刷新的技术。
Ajax最大的优点是在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。
Ajax技术核心就是XMLHttpRequest对象。
Ajax技术的工作原理:
1)创建Ajax对象:var xhr = new XMLHttpRequest();
2)xhr 发送请求:xhr.open('get','test.html','true');
xhr.send();
3)xhr获取响应:
xhr.onreadystatechange = function(){
if(xhr.readystate == 4){//请求的状态码
/*
0:请求还没有建立(open执行前)
1:请求建立了还没发送(执行了open)
2:请求正式发送(执行了send)
3:请求已受理,有部分数据可以用,但还没有处理完成
4:请求完全处理完成
*/
alert(xhr.responseText);//返回的数据
}
}
因此,可以看到,send()前是open()

插入一份ajax的代码: function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","/ajax/demo_get.asp",true); xmlhttp.send(); }


for(var i=0,j=0;i<10,j<6;i++,j++)的判断条件是i<10,j<6最后一项。即j<6
考察知识点: 逗号表达式 逗号表达式只有最后一项是有效的


定义函数的三种方式有:function函数、Function()构造函数、对象字面量。
从解析顺序来分析,它们的不同在于:function函数:优先解析;Function()构造函数、函数字面量定义:顺序解析。
具体分析


es6中将构造方法的function换成了class,用于与普通函数区分,其中的属性都放在constructor中,方法在原型中,子类继承采用extends关键字;对于es6中枚举的使用,只能是以类的方式定义枚举类,不能直接使用enum关键字


应用于数组中时:
orEach(), filter(), reduce(), every() 和some()都会跳过空位。
map()会跳过空位,但会保留这个值
join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。
ES6 中都会将空位当做undefined


代码回收规则如下:

1.全局变量不会被回收。

2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。

3.只要被另外一个作用域所引用就不会被回收(闭包中的量)


x={x:1};y={y:1};x==y(false)
每一个{}都相当于在内存开辟一个新空间,因此栈中存的地址指针是不可能相等的。


History的作用:

length 返回浏览器历史列表中的URL数量
back() 加载 history 列表中的前一个URL
forward() 加载 history 列表中的下一个URL
go() 加载history列表中的某个具体页面。


1.Ajax的优势:1.可搜索性 2.开放性 3.费用 4.易用性 5.易于开发。
2.Flash的优势:1.多媒体处理 2.兼容性 3.矢量图形 4.客户端资源调度
3.Ajax的劣势:1.它可能破坏浏览器的后退功能 2.使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中 ,不过这些都有相关方法解决。
4.Flash的劣势:1.二进制格式 2.格式私有 3.flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间 4.性能问题


对于DOM元素,children是指DOM Object类型的子对象,不包括tag之间隐形存在的TextNode,而childNodes包括tag之间隐形存在的TextNode对象
甚至包括空格和换行都被看做一个文本节点


promise的then和always
then 接收两个回调函数并返回一个新的 promise 对象,这两个回调函数分别对应成功回调 onFullfilled 和失败回调 onRejected,这两个回调函数接收 promise 的返回值;
always (finally) 接收一个回调函数并返回一个新的 promise 对象,回调函数在上一个 promise 解析完成之后调用,也就是不管前面是 then 还是 catch 被调用了,它都会被调用,该回调函数不会接收参数。


判断一个js对象是否是Array,arr为要判断的对象:
typeof(arr) 返回的是 Object
instanceof 在跨 frame 对象构建的场景下会失效
arr.toString 没有这种用法,正确的用法是 arr.toString() 返回的是数组的内容


js搜索变量是从内部顺原型链往外部找的


在JavaScript中,false、null、0、" "、undefined 和 NaN被称为假值。

var x = new Boolean();.

1.如果Boolean构造函数的参数不是一个布尔值,则该参数会被转换成一个布尔值。
2.如果参数是 0, -0, null, false, NaN, undefined, 或者空字符串 (“”),生成的Boolean对象的值为false。
3.其他任何值,包括任何对象或者字符串”false”, 都会创建一个值为true的Boolean对象。

var value = Boolean(value);

非布尔值转化成布尔值,需要直接使用Boolean函数,而不能通过新建Boolean对象。


var foo = {n:1};
(function(foo){ //形参foo同实参foo一样指向同一片内存空间,这个空间里的n的值为1
var foo; //优先级低于形参,无效。
console.log(foo.n); //输出1
foo.n = 3; //形参与实参foo指向的内存空间里的n的值被改为3
foo = {n:2}; //形参foo指向了新的内存空间,里面n的值为2.
console.log(foo.n); //输出新的内存空间的n的值
})(foo);
console.log(foo.n); //实参foo的指向还是原来的内存空间,里面的n的值为3.


关于Javascript中数字的部分知识总结:
1.Javascript中,由于其变量内容不同,变量被分为基本数据类型变量和引用数据类型变量。基本类型变量用八字节内存,存储基本数据类型(数值、布尔值、null和未定义)的值,引用类型变量则只保存对对象、数组和函数等引用类型的值的引用(即内存地址)。
2. JS中的数字是不分类型的,也就是没有byte/int/float/double等的差异。
3. "JavaScript内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。" 就是8字节


暂时记住:
会改变数组的方法:
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
forEach()
不改变:
filter()
concat()
slice()
map()


闭包的作用 1 可以读取函数内部的变量
2 可以把变量始终保存在内存中 闭包的写法
1 一个函数(即外部函数)里面包含另一个函数(即内部函数),并且return返回这个内部函数, 然后内部函数在定义内部函数之外的作用域被调用,这时的内部函数就是一个闭包了。
2 内部函数引用了外部函数的变量,这个变量不会被销毁,因为闭包需要这个变量, 所以通过闭包可以访问闭包保存的变量 function foo(){ var n = 1; function innerFoo(){ n += 1; console.log(n); } return innerFoo; } var func = foo(); func(); //
2, 产生闭包innerFoo(),变量n保存在内存中 func(); //
3 闭包的缺点
1 因为闭包的变量保存在内存中,内存泄漏,对内存的消耗很大,所以不要滥用闭包
闭包常用的地方:
1 es5 for循环事件监听
2 函数里使用了定时器
3 封装许多高级的功能集
减少闭包使用可以用立即执行函数传递变量


字符串拼接:
+的处理机制是:新建一个临时字符串,将新字符串赋值为a+b,然后返回这个临新字符串并同时销毁原始字符串,


浏览器不兼容CommonJS的根本原因,在于缺少四个Node.js环境的变量。 module exports require global


[]转换成字符串为“”
[]转换成boolean为true;
[]转换成数字为0;


HTML之外的#

暂时没放上去,。

posted @ 2021-03-03 23:19  梦中少女的心  阅读(58)  评论(0)    收藏  举报