文档章节

JS基础笔记(面试笔试有用)

SubinY
 SubinY
发布于 2016/11/28 20:55
字数 2770
阅读 21
收藏 1

【if判断‘=’和‘==’问题】千万记着以后都写双等于去判断
1、if( i = 0)和if( i == 0)
    
    第一个是赋值操作判断语句(这样写容易进入死循环除非是true和false的情况)  第二个才是正常情况

【for循环的】
1、先声明变量 后判断终止条件  再执行括号内容  最后++i
2、对于for循环  i++和++i都可以使用,++i的内存应用效率更高,在转化成汇编语言的时候,会少开辟一个变量

【字符相加和相减的类型变化】
1、5 + '8' 和  ‘5’+‘8’打印结果为58(最终都转换为string类型)  5 + 8  =13  num 类型
2、‘8’ - 5   和 ‘8’ - ‘5’ 和 8 - 5 打印结果都为3(最终都转换为num类型)
3、 ‘asd’ -  ‘zcx’ 打印结果未NaN(最终结果为num类型)

【释放内存和销毁变量】
1、函数调用完后,立即销毁函数内的局部变量

【style和script的位置】
1、style样式一般写在<head></head>里面,但实际上可以写在body里面或者其他位置,但这就会涉及到浏览器渲染顺序问题,style标签写在body里
   CSS会重新渲染一次页面,占用一定时间,如果网页篇幅少的话感觉不出来,如果篇幅多(大量HTML)会有一定的影响,所以大页面中不建议将style
   写进body
    (就像一些电商网站,有部分CSS写在body里面,这是为了方便修改源代码,否则你还得去翻CSS比如网站左侧、右侧的广告模块,很多页面都
      要加入这个广告,所以他就把广告这一块的html写到一个文件里,然后在加载过来。所以css也和他写在一起。)

【淘宝搜索框 oninput&&onpropertychange
1、    打字label文字就消失,清空文字就显示原本的label文字
        
    window.onload = function(){
            function $(id){return document.getElementById(id);}
            //oninput 大部分浏览器支持  检测用户表单输入内容
            //onpropertychange  ie678  检测用户表单输入内容
            $("txt").oninput = $("txt").onpropertychange = function(){
                if(this.value == " ")
                {
                    $("message").style.display = "block";
                }
                else
                {
                    $("message").style.display = "none";

                }
            }
        }

2、<input type="text" placeholder="必败的国际大牌">  同样得到上面的效果   placeholder是H5 input的新属性


这2种写法避免多重判断光标位置,是否打字等,

 

【算法、关系、逻辑运算符的关系】
1、逻辑运算符(!,&&,||)与操作:eg   var result=true&&3 //3
                    var result=1&&3    //3
                    var result=false&&3//false
                    var result=""&&3   //""      (前面根据booler类型决定 true就取最后一个true的值 false就取false的值)

               或操作:如果第一个值为真则结束后面的判断    (true就取第一个true的值 false就取最后一个false的值)

2、优先级----------------算术运算符》关系运算符》逻辑运算符

运算符顺序

1  ()

2  !、-、++、--    (-10)  负号  正号

3 *、/、%

4 +、-         10-5

5 <、<=、<、>=    

6 ==、!=、===、!==、  

7 &&

8 ||

9?:

10 =、+=、-=、*=、/=、%=     赋值

 

window.getComputedStyle("元素", "伪类")[attr]】(伪类位置默认为null)
1、获取一个元素的属性集合
    用法:getComputeStyle(element,null).width  

    优点:解决obj,style[attr]只能去行内样式的缺陷

    缺点:因为要得到全部属性集合才能取想要的值,所以是非常耗内存的操作

 

【eval】(一般不用,以防面试会问)
1、eval方法是开启程序解析器的入口,对于js程序来说,当程序运行的时候,会开启一次程序解析器,会解析对应的代码,当我们
   使用eval函数的时候会再次开启程序解析器,会解析eval中的内容
2、可以用来让浏览器自己识别简单的算法运算并得出结果

3、eval原理   去掉字符串的冒号,变成非string类型

【JS的数组和别的语言数组最大区别】
1、JS同一个数组能同时存放不同的数据类型,别的语言只能存贮相同类型的数据类型

【全选与反选得出的取反思想】
1、 
    btns[1].onclick = function () {
        for(var i =0;i <inputs.length;i ++){
            //左边的设置值,右边的是取值
            inputs[i].checked = !inputs[i].checked;
        }
    }

    这种方法一般是控制dom元素的属性值,!这里是关键,因为一般属性判断只有2个值true 和 false,用这种方法会比较简洁;


【window.location.href】
1、页面跳转方法


【定时器的本质】
1、Interval定时器:在外设置1s间隔循环一次,如果里面的程序需要2s才能运行完毕,那么最终时间2s
        (一个定时器,外面设置间隔时间,里面也有执行时间,最终时间按长的时间计算)
2、TimeOut定时器:间隔时间+程序执行时间 = 最终时间;

    这里涉及队列问题,有异步的思想在里面,原理是定时器的运作会与定时器里面的程序同时启动,如定时器间隔1s运行1次,里面程序2秒才能执行完程序,那么定时器会与里面程序同时执行(异步)当定时器1s过完后,必须要等待里面程序执行完毕才能执行下一次定时器循环,而这里由于定时器的1s已经完成,所以下一次循环会立刻开启

3、函数声明放在定时器外面,能提高效率,避免每一次定时器循环都声明变量开辟新的内存,这样会耗用性能

 


【元素的类型判断nodeType】
1、nodeType = 1  为元素节点
2、nodeType = 2  为属性节点
3、nodeType = 3  为文本节点

4、用法******************    (可以在循环内判断nodeType类型去添加不同节点类型)


【array.srot()】(面试可能会问)
1、sort()原理是通过ascII编码顺序去排列,是按照数组的值的首字母或者首位数字去进行由大到小排列,所以是不精准的
    如果需要按顺序由大到小或者小到大完整排列,必须在sort()括号里添加一个参数去判断比较a,b值大小,


*************   详情查看W3C

【document.body】
1、如果在用 document.body.appendChild();  生成的元素会插在<script></script>的后边

    (原因是浏览器解析的时候会把<script></script>标签放到body内)


【innerHTML和value】
1、获取文本,<input>和<textarea> 必须用.value

 

【offsetLeft的位置】
1、offsetLeft是相对于有定位(无论相对定位还是绝对定位)的父盒子(offsetParent)  没有就找body去找位置

 
【json的一些注意事项】
1、json是无序的,不能用下标去表示
2、访问里面的值,可以用点语法,也可以用[]
    如果用json['key']   那么json里面的键值对的键可以用引号也可以不用引号都能获取

    如果用json.key      怎么取值都能获取,但不能写成json.'key';

3、反正想着获取的key值 是否是字符串就可以选择相对应的方法


【抽取工具类的原因】(面试)
1、提高代码扩展性,可以举 12.7最后一个例子  json----myfn的例子去解释 (是一个由获取id tagname 到 for循环的抽取例子)

                    这个封装的each方法,只是作了声明 和 调用 ,所以赋值在调用each的时候才真正完成一个函数的调用

【右键事件】
1、document.oncontextmenu = function(e){}    document是最大的事件源

    e是事件源   兼容ie的方法   var e = e || event;


2、return false;能清空默认右键事件并且不影响自定义事件


【e.currentTarget】
1、用来获取当前的事件源是谁  类似于this


【for循环的另一种写法】(思想一致)(遍历最里层盒子到页面边的距离)
1、    var box2 = document.getElementsByTagName('div')[2];
        var sum = 0;
        for( var i = box2; i.offsetParent; i = i.offsetParent){
            sum += i.offsetLeft + i.offsetParent.clientLeft;
        }
       console.log(sum);

【offset和client前缀】
1、offsetWidth,offsetHeight      是 content + padding + border 的距离

************************  document.body.offsetHeight 获取标签高度
   
   offsetLeft,offsetTop         是到最近的有定位的父级的距离(不包含该父级的边框)

2、clientWidth,clientHeight      是 content + padding 的距离

*********************  document.body.clientHeight 获取页面视口高度(与上面不一样)
 

   clientLeft,clientTop         是该元素border的厚度

3、parentNode和offsetParent     parentNode是找父盒子(最深找到HTML标签)    offsetParent是找有定位的父盒子(最深只找到body标签)
 

【获取屏幕分辨率(就是显示屏的)】
1、window.screen.width  /   window.screen.height
 

【闭包的原理】
1、闭包的作用:延长局部变量的生命周期  (同时,弊端就会大量占用内存)

2、需求1:想要在函数外面(另外一个函数中)访问某一个函数内部的局部变量


【for循环内部的一些原理】
1、在for循环遍历按钮时,如果要在按钮输出变量i,会得到最后的i值,这是因为按钮、定时器等都是延时操作,只要有延时操作最终输出的变量都是i值,
    因为在按钮点击或者触发定时器的时候外层的for循环已经完成。(基本我接触到的里面任何函数操作都是延时操作,除了闭包)

    eg:    var div = document.getElementsByTagName('div');
        for( var i = 0; i < div.length; ++i){
           (function(a){
               div[i].onmouseover = function(){
                console.log(a);
              }
            })(i)
        }

    ******************这里闭包里面的div[i] 为什么能获取i的值,就是因为外面的闭包不是延时操作,所以可以遍历所有的div;

【btn.onclick = function(){}】
1、为什么这里的匿名函数funtion(){} 不能传入普通参数进行操作,是因为这里的参数是代表前面btn的onclick事件源,
    btn.onclick = function(a){
       console.log(a);          //返回ClickEvent{}   (代表事件源)
    }

        btn.onclick 等于号后面是一个函数体,要有click出发才会执行,所有不应该有小括号立即调用,所以也不存在有普通参数传递的原因,但事件参数a会一直存在


【字符操作】
1、(获取数字) indexOf('string')      括号里放获取位置的字符 从左向右顺序,没有该字符就返回-1;   
                    else:(lastIndexOF('strinig'))   从右向左找,但返回的数字也是从左向右

2、(获取字符) charAt()        括号里放对应字符的位置去获取相应字符
3、        charCodeAt()        去对应字符的Unicode编码   普通编码‘0-127编号’ 中文的编码是大于127  而且中文占2个字符的位置
                    **********Unicode和askcII

 

【ClientY和PageY(不兼容IE)】
1、e.ClientY 只能获取视觉上的页面顶部
2、e.PageY   获取页面最顶部,不管是否有滚动条

 

【for里面定义的变量是全局变量】
1、for里面定义的变量是全局变量

2、var a = 1;
   var a = 2;           //第二个var被自动忽略
    console.log(a);    //2  
    ********************************JS容错率很高,当检测到第一个var a的时候会向内存开辟一个空间,后边的重复声明a都会自动忽略var
                    这是引擎处理程序问题,要了解要自己百度
【透明度兼容】
1、opacity: 0.4;       W3C浏览器
2、filter: alpha(opacity:40);        兼容IE

© 著作权归作者所有

共有 人打赏支持
SubinY
粉丝 8
博文 87
码字总数 66118
作品 0
佛山
程序员
前端面试&笔试&错题指南(三)

JavaScript排坑指南(三) JavaScript总是给人以惊喜,学习不止,进步不断,今天继续补充JS容易搞错的几道笔试/面试题,为了秋招继续努力,欢迎一起为秋招努力的小伙伴共勉 ------------------...

Vincent Ko
08/12
0
0
【吐血整理】前端求职面试资源分享,值得收藏!

面试不是单纯考察技术,而是综合能力的考查,关于面试,职位JD怎么看,知识点怎么复习,问题如何回答,项目怎么准备,和负责人如何沟通,怎么给HR留下良好印象……别小瞧这些问题,往往就是这...

慕课网官方_运营中心
07/25
0
0
太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数

面试攒经验,let's go! 值此高考来临之际,闲不住的我又双叒叕出发去面试攒经验了,去了公司交待一番流程后,面试官甩给了我一张A4纸,上面写着一道js算法笔试题(一开始我并不知道这是在考...

闰土大叔
06/07
0
0
北京实习面试总结,四天面试6个公司,有所收获。

这次进京很仓促,对于自己来说其实没有任何预兆,想在北京找个实习,不过现在大三,学校方面压力也很大,导员不允许我出来实习,所以我就偷偷逃课出来了。说说最近几天的面试经历~四天,面试...

明非_
2014/09/25
0
7
JS的Event Loop 和 microTask

面试和笔试题目中,经常会出现'promise','setTimeout'等函数混合出现时候的运行顺序问题。 我们都知道这些异步的方法会在当前任务执行结束之后调用,但为什么'promise'会在'setTimeout'之前执...

Vincent Ko
08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

安全管理标准

安全生产严重等级分类: 故障频次: 风险等级矩阵:

乔老哥
20分钟前
1
0
数据结构“树”的相关微视频

今天在腾讯视频上闲逛,然後发现一个叫“岚人”的用户上传了几段小视频,基本上都在5分钟以内,讲解了关于树的一些结构和算法。零代码,非常适合初学者入门。不过,对于老鸟来说,这也是非常...

Iridium
32分钟前
0
0
10-利用思维导图梳理JavaSE-Java 集合

10-利用思维导图梳理JavaSE-Java 集合 主要内容 1.Collection接口 2.Set接口 2.1.Set接口概述 2.2.HashSet类 2.3.TreeSet类 2.4.SortedSet接口 3.List接口 3.1.List接口概述 3.2.ArrayList类...

飞鱼说编程
44分钟前
3
0
活动推荐|互联网3.0与区块链新时代论坛(北京)

1 时间地点 **时间:**9月22日 14:00 - 18:00 地点:(北京海淀)西大街70号 3w咖啡 二层 2 活动详情 Harmony创始人Stephen及团队将介绍他们的区块链分片扩容技术。Stephen曾任Apple地图服务...

HiBlock
今天
1
0
如何优雅的删除Redis的大key

关于Redis大键(Key),我们从[空间复杂性]和访问它的[时间复杂度]两个方面来定义大键。前者主要表示Redis键的占用内存大小;后者表示Redis集合数据类型(set/hash/list/sorted set)键,所含有的...

IT--小哥
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部