文档章节

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

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

【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
博文 86
码字总数 63997
作品 0
佛山
程序员
太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数

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

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

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

明非_
2014/09/25
0
7
继 Java 版权案之后,甲骨文公司开始向 JavaScript 伸手!

就在 JavaScript 成为 GitHub 网站最为流行、越来越受到广大开发者热衷的编程语言之际,国外网站 reddit 的一篇求助性帖子引发行业内的热议。 帖子大意就是,该作者收到苹果公司的一封邮件,...

亦枫
04/19
0
0
js创建数组的几种方式及其常见的几个问题

申明:本文是js系列笔记之一,仅供学习参考;有不正确的地方请尽管指出,大家相互学习,共同进步,适合js新手,高手秒退; 创建数组的3种方式: 1. 2. 3. 问题1:js数组与其他强类型语言的数...

XBGG
06/27
0
0
网易音乐前端实习程序员面试的10个问题,你会几个?

近日,w3cschool app开发者头条上分享了网易音乐前端实习程序员面经,引来了不少程序员粉丝们的围观。 在分享网易音乐前端实习面试问题之前,w3cschool先跟小伙伴们分享前端学习干货: 0、h...

W3Cschool
04/17
0
0
7天内我面试了10家公司,如何从命中率0%到命中率至70%?

先交代下po主背景,女, 17年江苏二本通信工程专业毕业,求职前端开发工程师。毕业后在上海一家创业公司担任前端开发工程师。 内心独白:实事求是地写年限,心急吃不了热豆腐;实事求是告诉面...

嘿你好夏天
04/17
0
0
Java程序员面试经验分享,拿到神州数码的offer

刚拿到了神州数码的offer。虽然工资不是特别高,虽然很多人一毕业就能进入这样的公司,但是对我这个半路出家的大专生来说,能进去纯属意外。 今天的面试,一不小心谈到了以前我接过一些私单,...

y0q2t57s
04/18
0
0
结合个人经历总结的前端入门方法

作者:qiu deqing 链接:https://github.com/qiu-deqing/FE-learning 结合个人经历总结的前端入门方法,总结从零基础到具备前端基本技能的道路、学习方法、资料。由于能力有限,不能保证面面...

SomaLihq
06/27
0
0
JS基础知识(覆盖JS基础面试题)

总结一些前端基础的知识,有些知识可能在前端面试的时候会问到,所以做个记录,也有助于其他人查看,如果有什么问题,可以指出,会积极修正。 变量类型和计算 JS中typeof的类型有哪些 类型转...

a独家记忆
07/10
0
0
5个典型的JavaScript面试题(上)

本文由伯乐在线 -XfLoops 翻译,黄利民 校稿。未经许可,禁止转载! 英文出处: Aurelio De Rosa。欢迎加入 翻译组。 IT 行业对JavaScript开发者有着很大的需求。如果你具备这种角色所需的知...

伯乐在线
2014/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
1
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
0
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
0
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
1
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部