css 选择符有哪些

通配选择符 *
类选择符 class
id选择符 id
属性选择符 input[name=button]
包含选择符 类似 div span
子对象选择符 类似 div > span

apply() 和 call()的区别  ==和===的区别  null和undefined的区别

apply和call参数不同 call可以传多个参 apply只能传二个参

双等号只要值相等就为真

三等号 值和类型必须都相同才为真

null 指向了一个空的对象 可以看做一个空指针 不占用内存

undefined 当声明一个未初始化的变量的时候 值为undefined 会占用内存 只不过值为undefined

js的事件模型有哪些

dom0事件模型  原始事件模型

dom2事件模型  分为三个阶段  目标阶段、捕获阶段、冒泡阶段

dom3事件模型  只不过是在原来的事件上增加了一些事件类型

简述异步编程模式

对于在浏览器中频繁操作会阻碍浏览器的响应速度 通过异步编程的模式可以加快浏览器的响应速度 这种模式被称为异步编程
(实现异步编程的有好多 譬如ajax、promise、deffer等都是采用异步编程来实现的)

for for in  for of之间的区别

其实三者的区别并不大 都是用来遍历数组或者对象的  只不过实现方式不同
for in 是以key -value的形式实现的
for of 是以iterator的形式实现的

深拷贝和浅拷贝的实现

//浅拷贝
function extendCopy(p){
var c = {};
for(var i in p){
c[i] = p[i];
}
return c;
}
//深拷贝
function deepCopy(p,c){
var c = c || {};
for(var i in p){
if(typeof p[i] === "object"){
c[i] = (p[i].constructor == Array) ? [] : {};
deepCopy(p[i],c[i]);
}else{
c[i] = p[i];
}
}
return c;
}

排序

//这里只使用冒泡排序作为例子
var arr = [2,1,4,7];
for(var i = 0;i<arr.length;i++){
for(var j = 0;j<arr.length-1-i;j++){
var temp;
if(arr[j]>arr[j+1]){
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}

数组去重

//这里只用一种方式来实现 还有好多方法大家自己去看吧
function duplicateArr(arr){
var temp = [];
for(var i = 0;i<arr.length;i++){
if(arr.indexOf(arr[i]) == i){
temp.push(arr[i]);
}
}
return temp;
}

html和html5的区别

1.文档声明不同

2.结构语义化不同

 document.write和innerHTML的区别

1.write是DOM方法,向文档写入HTML表达式或JavaScript代码,可列出多个参数,参数被顺序添加到文档中 ;innerHTML是DOM属性,设置或返回调用元素开始结束标签之间的HTML元素。
2.两者都可向页面输出内容,innerHTML比document.write更灵活。
当文档加载时调用document.write直接向页面输出内容,文档加载结束后调用document.write输出内容会重写整个页面。通常按照两种的方式使用 write() 方法:一是在使用该方在文档中输出 HTML,二是在调用该方法的的窗口之外的窗口、框架中产生新文档(务必使用close关闭文档)。
在读模式下,innerHTML属性返回与调用元素的所有子节点对应的HTML标记,在写模式下,innerHTML会根据指定的值创建新的DOM树替换调用元素原先的所有子节点。
3.两者都可动态包含外部资源如JavaScript文件
通过document.write插入<script>元素会自动执行其中的脚本;
大多数浏览器中,通过innerHTML插入<script>元素并不会执行其中的脚本。

而且document.write 有个最大的缺点就是会阻塞浏览器的解析和渲染速度(因为docume.write 在全局是同步的并且浏览器是无法预加载的)

请试运行下面的例子就可以看到结果了:

<script>
document.addEventListener("DOMContentLoaded", function(){
alert("执行异步渲染、绑定事件等操作")
})
document.write("<script src=http://www.twitter.com><\/script>")
</script>

var let const的区别:

1.var 可以挂载到window对象上 其它二个不会

var a = 100;
console.log(a,window.a); // 100 100 let b = 10;
console.log(b,window.b); // 10 undefined const c = 1;
console.log(c,window.c); // 1 undefined

2.var 有变量提升的概念   let 和const没有

console.log(a); // undefined  ===>  a已声明还没赋值,默认得到undefined值

var a = 100;
console.log(b); // 报错:b is not defined  ===> 找不到b这个变量

let b = 10;
console.log(c); // 报错:c is not defined  ===> 找不到c这个变量

const c = 10;

3.let 和const 会形成块级作用域  只能够在if代码块中访问到let声明的变量

if(1){
var a = 100;
let b = 10;
} console.log(a); //
console.log(b) // 报错:b is not defined ===> 找不到b这个变量

4.同一作用域下let和const不能声明同名变量,而var可以

var a = 100;
console.log(a); // var a = 10;
console.log(a); //
let a = 100;
let a = 10; // 控制台报错:Identifier 'a' has already been declared ===> 标识符a已经被声明了。

5.const

/*
*   1、一旦声明必须赋值,不能使用null占位。
*
*   2、声明后不能再修改
*
*   3、如果声明的是复合类型数据,可以修改其属性
*
* */ const a = 100; const list = [];
list[0] = 10;
console.log(list);  // [10] const obj = {a:100};
obj.name = 'apple';
obj.a = 10000;
console.log(obj);  // {a:10000,name:'apple'}

6.var 会涉及到一个层级的查找  如果函数内部 不带var 关键字创建一个同名的变量的话 会层级查找 直到 windows对象上 才结束查找

var a = 100;
function aa(){
a = 10;
console.log(a); //
}
aa();
console.log(a);//
var a = 100;
function aa(){
//如果带var 关键字的话就是一个全局变量和一个局部变量
var a = 10;
console.log(a);// 10
}
aa();
console.log(a); //100

js宏任务和微任务的概念

setTimeout(function(){
console.log(4);
})
new Promise(function(resolve,reject){
resolve();
console.log(1);
}).then(function(){
console.log(2);
})
console.log(3); //具体的思路请看链接 点击打开链接// 1 3 2 4

简述打开浏览器输入地址到页面展示的流程

1、当我们在浏览器的地址栏出输入一个地址 浏览器开始向地址所在的服务器发送http请求 紧接着 对应的服务器会响应浏览器的请求

2、浏览器解析、下载、呈现

浏览器是从上到下解析html文档的 先解析文档的声明  如果头部有js css等会先下载 加载这些文件 (js 图片 css等都会向服务器发送请求 下载资源)

等到解析到body节点时  会创建 dom节点树 =》创建css rules=》将之前下载下来的css文件作用到dom节点树上 形成dom渲染树=》 然后在通知浏览器去绘制dom渲染树 =》最后形成真实dom呈现给用户。

以上过程会涉及到css 和 js的阻塞 阻塞是怎么产生的呢?

js 阻塞

当把js放到header里面的话 会先下载并执行js的操作  但这样一来会阻塞其他资源的下载 而后面dom的呈现也会受到影响

 css阻塞

CSS本来是可以并行下载的,在什么情况下会出现阻塞加载了(在测试观察中,IE6下CSS都是阻塞加载)

当CSS后面跟着嵌入的JS的时候,该CSS就会出现阻塞后面资源下载的情况。而当把嵌入JS放到CSS前面,就不会出现阻塞的情况了。

根本原因:因为浏览器会维持html中css和js的顺序,样式表必须在嵌入的JS执行前先加载、解析完。而嵌入的JS会阻塞后面的资源加载,所以就会出现上面CSS阻塞下载的情况。

怎么加载js才不会对用户的呈现出现问题 (有阻塞解决这个问题)

1、放在底部,虽然放在底部照样会阻塞所有呈现,但不会阻塞资源下载。

2、如果嵌入JS放在head中,请把嵌入JS放在CSS头部。

3、ie使用defer属性  w3c 使用async

4、不要在嵌入的JS中调用运行时间较长的函数,如果一定要用,可以用`setTimeout`来调用

Javascript无阻塞加载具体方式 (无阻塞解决这个问题)

1、ie使用defer属性  w3c 使用async (这二种需要高浏览器支持)

2、利用js动态创建script标签 将它挂载到头部

3、利用事件监听 dom是否加载完毕 然后在下载js

<script>
var script=document.createElement("script");
script.type="text/javascript";
script.src="file.js";
document.getElementsByTagName("head")[0].appendChild(script);
</script>

这里相当于给head下面插入了一个script的标签。当script.src所对应的文件下载以后,再往后执行。

此技术的重点在于:无论何时启动、下载和运行都不会阻塞页面中其他部分的解析和呈现

数据的可变性和不可变性

所谓可变和不可变就是 直接改变数据和间接改变数据

直接改变数据对于复杂的特性不易于实现 譬如 追踪数据的历史记录 整个对象树都需要从新遍历一次

而间接改变数据只要发现对象变成了一个新对象 我们就可以说这个对象发生改变了

简述react

react是JavaScript的一种第三方框架库 react最显著的语法就是函数和jsx

jsx是JavaScript是一种表达式 可以作为变量赋值 也可以作为参数传入 还可以作为函数返回

多个jsx组合成react元素 react元素组合形成组件 然后通过reactDOM渲染成dom结构

react元素与浏览器的dom元素不同  react元素是创建开销极小的普通对象 reactDOM会负责更新dom于react元素保持一致

(很晚了后续在补充。。。)

js常见的面试题的更多相关文章

  1. PHPer常见的面试题总结

    1.平时喜欢哪些php书籍及博客?CSDN.虎嗅.猎云 2.js闭包是什么? 3.for与foreach哪个更快? 4.php鸟哥是谁?能不能讲一下php执行原理? 5.php加速器有哪些?apc.z ...

  2. 关于JavaScript 常见的面试题

    关于JavaScript常见的面试题总结 一.JavaScript基本数据类型 null:空.无.表示不存在,当为对象的属性赋值为null,表示删除该属性 undefined:未定义.当声明变量却没有 ...

  3. HTML5常见的面试题,基础知识点

                                                                                    HTML5常见的面试题 一.HTML 常 ...

  4. 部分常见ORACLE面试题以及SQL注意事项

    部分常见ORACLE面试题以及SQL注意事项 一.表的创建: 一个通过单列外键联系起父表和子表的简单例子如下: CREATE TABLE parent(id INT NOT NULL, PRIMARY ...

  5. js常见的判断移动端或者pc端或者安卓和苹果浏览器的方法总结

    1.js常见的判断移动端或者pc端或者安卓和苹果浏览器的方法总结 : http://www.haorooms.com/post/js_pc_iosandmobile 2.Js判断客户端是否为PC还是手 ...

  6. touch.js——常见应用操作

    touch.js--常见应用操作 基本事件: touchstart   //手指刚接触屏幕时触发 touchmove    //手指在屏幕上移动时触发 touchend     //手指从屏幕上移开时 ...

  7. HTML+CSS+js常见知识点

    一.HTML.CSS常见知识点 1.垂直居中盒子 /* 方法一 */ html, body { width: 100%; height: 100%; padding: 0; margin: 0; } ...

  8. 【面试必备】常见Java面试题大综合

    一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ...

  9. SQLServer 常见SQL笔试题之语句操作题详解

    SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ...

随机推荐

  1. CF_528D

    一句话题意 给你两个串s.t,长度为n.m,字符集为"ATGC",当且仅 当[i - k; i + k]中存在一个j,使得s[j ] = t[x]时,s[i ]可以 和t[x]匹配 ...

  2. dgraph解决社交关系中的正反向查找

    dgraph解决社交关系中的正反向查找 本篇介绍的是, 社交关系中的关注者与被关注者在dgraph中如何实现查找. 对dgraph的基本操作不太清楚的可以看看我之前写的博客 dgraph实现基本操作 ...

  3. 通用权限管理系统之权限菜单zTree树的展示及移动的处理方法

    在通用权限管理系统中,有很多数据结构是有父子关系的,如组织机构,部门,权限菜单等,在展示的时候,大多数是通过zTree树的形式展现的,如下: 权限菜单展示 这种数据后台输出比较容易处理,参考如下获取某 ...

  4. 基于jeesite的cms系统(一):开发环境搭建

    基于jeesite的cms系统系列,是对基于jeesite进行二次开发的博客模块开发过程的总结.涉及入门安装,二次开发,部署等 一.概况: JeeSite 是一个 Java 企业级快速开发平台,基于经 ...

  5. JGUI源码:开发中遇到的问题(11)

    1.IE8下浏览器下css body边缘要留一个像素,如果不留的话,很有可能看不到最边缘的像素. 2.同一种颜色在深色背景和浅色背景下给人的感觉不一样,在深色背景下,给人感觉特别亮,所以深色背景下的颜 ...

  6. HTTP常见的状态码——面试题常考

    一些常见的状态码为:  200 - 服务器成功返回网页 400(错误请求)服务器不理解请求的语法. 404 - 请求的网页不存在 500(服务器内部错误)服务器遇到错误,无法完成请求. 503 - 服 ...

  7. Exp1:PC平台逆向破解 20164314 郭浏聿

    一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getS ...

  8. WordPress Plugin Contact Form Builder [CSRF → LFI]

    # Exploit Title: Contact Form Builder [CSRF → LFI]# Date: 2019-03-17# Exploit Author: Panagiotis Vag ...

  9. 小程序 <web-view></web-view> 中使用 form 表单提交

    在最近的小程序项目中,使用到了 <web-view></web-view> 内嵌 H5 页面,在 H5 中需要使用 form 表单提交数据. H5 使用的技术框架是 vue+v ...

  10. Centos6.5 安装 python3.5 虚拟环境 virtualenvwrapper

    Centos6.5 安装 python3.5 虚拟环境 virtualenvwrapper 1 . 安装 python3.5 下载:https://www.python.org/ https://ww ...