JS 语法

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

css一般使用 link 标签将样式表放在顶部的标签内,
js一般放在页面底部(标签前)

2.解释白屏和FOUC

  • 如果把样式放在底部,对于IE浏览器,在某些场景下(新窗口打开,刷新等)页面会出现白屏,而不是内容逐步展现如果使用 @import标签,即使 CSS 放入 link, 并且放在头部,也可能出现白屏
  • 如果把样式放在底部,对于IE浏览器,在某些场景下(点击链接,输入URL,使用书签进入等),会出现 FOUC 现象(逐步加载无样式的内容,等CSS加载后页面突然展现样式).对于 Firefox 会一直表现出 FOUC .
  • 如果将JS放在底部,脚本会阻塞后面内容的呈现也会阻塞其后组件的下载。对于图片和CSS, 在加载时会并发加载(如一个域名下同时加载两个文件). 但在加载 JavaScript 时,会禁用并发,并且阻止其他内容的下载. 所以把 JavaScript 放入页面顶部也会导致 白屏现象。

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

如果没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。而有了async或者defer后,加载和渲染后续文档元素的过程将和 script.js异步执行。

区别:
  • async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(不保证顺序)。
  • 有 defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成(脚本延迟到文档解析和显示后执行,有顺序)。

4.简述网页的渲染机制

  • 1.解析 HTML 标签, 构建 DOM 树
  • 2.解析 CSS 标签, 构建 CSSOM 树
  • 3.把 DOM 和 CSSOM 组合成 渲染树 (render tree)
  • 4.在渲染树的基础上进行布局, 计算每个节点的几何结构
  • 5.把每个节点绘制到屏幕上 (painting)
JS 语法_第1张图片
render-tree-construction.png

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

JavaScript的数据类型,共有六种。
简单类型:

  • 数值(number):整数和小数(比如1和3.14)
  • 字符串(string):字符组成的文本(比如"Hello World")
  • 布尔值(boolean):true(真)和false(假)两个特定值
  • undefined:表示“未定义”或不存在,即此处目前没有任何值
  • null:表示空缺,即此处应该有一个值,但目前为空
    复杂类型:
  • 对象(object):各种值组成的集合

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

  • NaN:含义是Not a Number,表示非数字,NaN和任何值都不相等,包括自己
    -undefined:该类型只有一个值,即特殊的undefined。在var声明变量但未对其加以初始化时,这个变量的值就是undefined。
    null:表示空缺,即此处应该有一个值,但目前为空。

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

typeof是一元运算符,返回值为字符串,该字符串用来说明运算数的数据类型
instanceof用于判断一个变量是否某个对象的实例,返回true或者false。是二元运算。

代码

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( isNumber(a) );  //true
alert( isString(a) );  //false
alert( isString(b) );  //true
alert( isBoolean(c) ); //true
alert( isFunction(a)); //false
alert( isFunction( isNumber ) ); //true

2.以下代码的输出结果是?

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

3.以下代码的输出结果是?

var a = 1;
a+++a;//3
typeof a+2;//number2

4.遍历数组,把数组里的打印数组每一项的平方

var arr = [3,4,5];
for(var i=0;i

5.遍历 JSON, 打印里面的值

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

6.下面代码的输出是? 为什么 ?

console.log(a);//undefined
var a = 1;
console.log(a);//1
console.log(b);//报错

原因var语句会被提到前面,所以a被声明但是并没有赋值。
b没有被声明所以报错。

你可能感兴趣的:(JS 语法)