JS基础知识

2016-12-11  本文已影响0人  Maggie_77

问答

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

2、解释白屏和FOUC

另外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 解析。

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

4. 简述网页的渲染机制

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

渲染树构建过程如下:


0_1481458149536_render-tree-construction.png

2、布局阶段

3、绘制元素

4、合并渲染层

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

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

基本数据类型:

复杂数据类型:

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

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

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

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

谈到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的地方。需要说明的是,变量提升只是提升变量的声明,并不会把赋值也提升上来。

上一篇 下一篇

猜你喜欢

热点阅读