JS基础知识

问答

1、CSS和JS在网页中的放置顺序是怎样的?

  • 一般来说css 放在Head标签里;Js放在body标签里最后面。
  • css放在前端加载时因为页面渲染时首先是根据DOM结构生成一个DOM树,然后加上CSS样式生成一个渲染书,如果CSS放在后面可能页面会出现闪的感觉,或者是白屏,或者布局混乱样式很丑直到CSS加载完成。
  • JS会阻塞加载,会影响到页面加载的速度,如果一个JS文件比较大,算法也比较复杂,会使得页面加载速度变得很慢。

2、解释白屏和FOUC

  • 白屏与无样式内容闪烁(FOUC)是因为不同浏览器加载与显示页面的机制不同而造成的。

  • 当把css样式放在底部或者使用@import方式引入样式时
    一些浏览器例如chrome和IE,他的加载和渲染机制是等css全部加载解析完后再渲染展示页面,而这个等待的时间就为白屏。

  • 另一些浏览器例如Firefox,他会在css未加载前先展现页面,等css加载后再重绘一次,这就造成了FOUC (无样式内容闪烁)。

  • 所以为了避免这些问题,最好使用LINK标签将样式表放在文档的HEAD中。

另外IE浏览器和Firefox的区别
Firfox浏览器:
•样式表位于顶部:页面内容逐步呈现
•样式表位于底部:
◦与页面呈现内容无关:页面内容逐步呈现
◦呈现与页面呈现内容有关:出现无样式内容闪烁

IE浏览器
•样式表位于顶部:逐步加载
•样式表位于底部:
◦出现白屏:当重新加载页面、将页面设置为默认首页并打开、在新窗口中打开页面时出现

3. async和defer的作用是什么?有什么区别

  1. 默认引用 script:<script type="text/javascript" src="x.min.js"></script>
    当浏览器遇到 script 标签时,文档的解析将停止,并立即下载并执行脚本,脚本执行完毕后将继续解析文档。

  2. async模式 <script type="text/javascript" src="x.min.js" async="async"></script>
    当浏览器遇到 script 标签时,文档的解析不会停止,其他线程将下载脚本,脚本下载完成后开始执行脚本,脚本执行的过程中文档将停止解析,直到脚本执行完毕。

  3. defer模式 <script type="text/javascript" src="x.min.js" defer="defer"></script>
    当浏览器遇到 script 标签时,文档的解析不会停止,其他线程将下载脚本,待到文档解析完成,脚本才会执行。

下面来看一张图:


0_1481457585131_bVcQV0.jpg

蓝色线代表网络读取,红色线代表执行时间,这俩都是针对脚本的;绿色线代表 HTML 解析。

此图告诉我们以下几个要点:

  • defer 和 async 在网络读取(下载)这块儿是一样的,都是异步的(相较于 HTML 解析)
  • 它俩的差别在于脚本下载完之后何时执行,显然 defer 是最接近我们对于应用脚本加载和执行的要求的
  • 关于 defer,此图未尽之处在于它是按照加载顺序执行脚本的,这一点要善加利用
  • async 则是一个乱序执行的主,反正对它来说脚本的加载和执行是紧紧挨着的,所以不管你声明的顺序如何,只要它加载完了就会立刻执行
  • 仔细想想,async 对于应用脚本的用处不大,因为它完全不考虑依赖(哪怕是最低级的顺序执行),不过它对于那些可以不依赖任何脚本或不被任何脚本依赖的脚本来说却是非常合适的,最典型的例子:Google Analytics

4. 简述网页的渲染机制

1、浏览器解析(包括HTML,SVG,XHTML,CSS,JavaScript等等)

  • 解析HTML代码,构建Document Object Model (DOM)
  • 解析CSS代码,构建CSS Object Model (CSSOM)
  • JavaSript通过API操作DOM和CSSOM,

渲染树构建过程如下:


0_1481458149536_render-tree-construction.png

2、布局阶段

  • 在屏幕上绘制渲染树中的所有节点的几何属性,比如: 位置,宽高,大小等等

3、绘制元素

  • 绘制所有节点的可视属性,比如:颜色,背景,边框,背景图等,这期间可能会产生多个图层(堆叠上下文)。

4、合并渲染层

  • 把以上绘制的所有图层(类似于PhotoShop中的“图层”)合并,最终输出一张图片。

5. JavaScript 定义了几种数据类型? 哪些是简单类型?哪些是复杂类型?

在JavaScript中,有5种基本数据类型和1种复杂数据类型,可以使用typeof来检测是什么数据类型。

基本数据类型:

  • 简单数据类型:
    1.number数据类型 —— var num=123;
    2.string数据类型 —— var str="abcd";
    3.boolean数据类型 —— var bool=ture;
  • 特殊数据类型:
    4.未定义undefined —— var a;
    5.空 null —— var a=null

复杂数据类型:

  • object —— var obj={"name":"小明","age":"14"};

6. NaN、undefined、null分别代表什么?

  • NaN是一个特殊值,表示非数(not a Number)例如Number ("123a") 得到的即为NaN;
    NaN 不等于自己.
  • undefined表示"缺少值"——表明此处应该有一个值,但是没有定义.例如 var a;
  • null表示"没有对象"——即该处不应该有值。

7.typeof和instanceof的作用和区别?

instanceof 和typeof都能用来判断一个变量是否为空或是什么类型的变量。

  • typeof 用以获取一个变量的类型,typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。
  • 我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错,对于 Array,Null 等特殊对象使用 typeof 一律返回 object。

这正是 typeof 的局限性。如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。

  • instanceof 用于判断一个变量是否某个对象的实例,如 var a=new Array();alert(a instanceof Array);会返回 true,
  • 同时 alert(a instanceof Object) 也会返回 true;这是因为 Array 是 object 的子类。再如:function test(){};var a=new test();alert(a instanceof test) 会返回 true。

谈到instanceof 我们要多插入一个问题,就是 function 的 arguments,我们大家也许都认为 arguments 是一个 Array,但如果使用 instaceof 去测试会发现 arguments 不是一个 Array 对象,尽管看起来很像。

代码题

1. 完成如下代码判断一个变量是否是数字、字符串、布尔、函数 (难度*)

function isNumber(el){
    return typeof(el)==="number";
  }
  function isString(el){
    return typeof(el)==="string";
  }
  function isBoolean(el){
    return typeof(el)==="boolean";
  }
  function isFunction(el){
    return typeof(el)==="function";
  }

  var a = 2,
      b = "jirengu",
      c = false;
  alert( "2是数字:"+isNumber(a) );  //2是数字:true
  alert( "2是字符串:"+isString(a) );  //2是字符串:false
  alert( '"jirengu"是字符串:'+isString(b) );  //"jirengu"是字符串:true
  alert( "false是boolean:"+isBoolean(c) ); //false是boolean:true
  alert( "2是函数:"+isFunction(a)); //2是函数:false
  alert( "isNumber是函数:"+isFunction( isNumber ) ); //isNumber是函数:true

2. 以下代码的输出结果是?(难度**)

console.log(1+1); // 2  
console.log("2"+"4"); //24  
console.log(2+"4"); //24  
console.log(+new Date());// 1481460619667   
console.log(+"4"); //4   

3. 以下代码的输出结果是? (难度***)

var a = 1;
a+++a; // 3     解析:(a++)+a

typeof a+2; //"number2"     解析:先typeof a返回“number”,再+2

4. 遍历数组,打印数组每一项的平方 (难度**)

var arr = [3,4,5];
  for(var i=0;i<arr.length;i++){
    console.log(arr[i]*arr[i]);
  } // 输出 9, 16, 25

5. 遍历 JSON, 打印里面的值 (难度**)

var obj = {
  name: 'hunger',
  sex: 'male',
  age: 28
};
for(var k in obj){
  console.log(k+":"+obj[k]+",")
}// 输出 name: hunger, sex: male, age:28

6.下面代码的输出是? 为什么 (难度***)

console.log(a); // undefined 
var a = 1;
console.log(a);//1
console.log(b);// Uncaught ReferenceError: b is not defined(…)   
/*第一个显示为undefinde 是因为JS的变量提升。相当于
var a;
console.log(a);
var a = 1;
console.log(a);
console.log(b);*/

变量提升,就是把变量提升提到函数的top的地方。需要说明的是,变量提升只是提升变量的声明,并不会把赋值也提升上来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • 1.CSS和JS在网页中的放置顺序是怎样的?为什么会出现白屏和FOUC? 在写HTML代码时,我们都是将CSS文件...
    26d608950683阅读 610评论 0 0
  • 问答题 1.CSS和JS在网页中的放置顺序是怎样的? CSS: JS: 放在html后面, 之前 2.解释白屏和F...
    风骨来客阅读 372评论 0 0
  • 1.CSS和JS在网页中的放置顺序是怎样的? CSS一般用link放置在网页的头部,JS一般放置body的底部。如...
    betterwlf阅读 394评论 2 5
  • SS和JS在网页中的放置顺序是怎样的?CSS放入<head>标签中,用link方式引入.因为link在页面加载的同...
    love2013阅读 602评论 0 0
  • 带语文之前给他们带过一段时间的英语。 他在他给我写的小纸条上“批评”我节奏太快。 他来办公室订正默写,我还记不全他...
    靚小宝阅读 417评论 0 0