1. CSS和JS在网页中的放置顺序是怎样的?
我们可以把CSS和JS的代码分别放在单独的文件中,然后在HTML的头部通过link引入CSS文件
在body的底部通过引入JS代码文件。
2. 解释白屏和FOUC
导致白屏和FOUC的可能
在IE浏览器的某些情况下,样式放在底部,JS放在页面顶部,或者@import方式引入样式。
解决办法
样式引入放在HTML的头部,始终使用link方式引入文件,JS放在底部。
导致这种现象的原因是由于样式的加载晚于HTML
3. async和defer的作用是什么?有什么区别
async 和 defer 都是异步加载 js 脚本。
带有 defer 属性的<script>
标签可以放置在文档的任何位置。对应的 JavaScript 文件将在页面解析到<script>
标签时开始下载,但不会执行,直到 DOM 加载完成,即onload事件触发前才会被执行。当一个带有 defer 属性的 JavaScript 文件下载时,它不会阻塞浏览器的其他进程,因此这类文件可以与其他资源文件一起并行下载。
async 它的作用和 defer 一样,能够异步地加载和执行脚本,不因为加载脚本而阻塞页面的加载。但是有一点需要注意,在有 async 的情况下,JavaScript 脚本一旦下载好了就会执行,所以很有可能不是按照原本的顺序来执行的。如果 JavaScript 脚本前后有依赖性,使用 async 就很有可能出现错误。
4. 简述网页的渲染机制
解析 HTML 标签, 构建 DOM 树
解析 CSS 标签, 构建 CSSOM 树
把 DOM 和 CSSOM 组合成 渲染树 (render tree)
在渲染树的基础上进行布局, 计算每个节点的几何结构
把每个节点绘制到屏幕上 (painting)
5. JavaScript 定义了几种数据类型? 哪些是简单类型?哪些是复杂类型?
5种简单的数据类型:
1.Null :只有一个值:null,表示空指针。
2.Undefined: 也只有一个值:undefined,表示变量只被声明,但不指向任何空间。
3.Boolean: 两个值:ture,false。布尔值经常用在条件判断中。
4.Number: 不区分整数和浮点数,Number可以直接做四则运算,规则和数学一致。
5.String: 字符串是以单引号’或双引号”括起来的任意文本。’
复杂类型object
对象是一组由键-值组成的无序集合
6. NaN、undefined、null分别代表什么?
NaN含义是Not a Number,表示非数字,NaN和任何值都不相等,包括自己
null表示一个“空”的值,它和0以及空字符串’’不同,0是一个数值,’’表示长度为0的字符串,而null表示“空”。
undefined表示值未定义。
大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。
7. typeof和instanceof的作用和区别?
typeof运算符返回一个值的数据类型。
instanceof运算符判断一个变量是否是某个对象(类)的实例,返回值是布尔类型的。
8. 判断一个变量是否是数字、字符串、布尔、函数
判断一个变量是否是数字1
2
3function isNumber(el){
return typeof el==='number';
}
判断一个变量是否是字符串1
2
3function isString(el){
return typeof el==='string';
}
判断一个变量是否是布尔1
2
3function isBoolean(el){
return typeof el==='boolean';
}
判断一个变量是否是函数1
2
3function isFunction(el){
return typeof el==='function';
}
9. 以下代码输出结果是1
2
3
4
5console.log(1+1); //2
console.log("2"+"4"); //"24"
console.log(2+"4"); //"24"
console.log(+new Date()); // 1452271614562
console.log(+"4"); //4
10. 以下代码输出结果是1
2
3var a=1;
a+++a; //相当于(a++)+a 输出结果为3
typeof a+2; //相当于(typeof a)+2 输出结果"number2",
11. 遍历数组,打印数组的每一项的平方1
2
3
4
5
6var arr=[3,4,5];
var i,x;
for (i=0;i<arr.length;i++){
x=arr[i]*arr[i];
console.log(x);
}
12. 遍历JSON,打印里面的值1
2
3
4
5
6
7
8
9
10var obj={
name:'hunger',
sex:'male',
age:28
};
var a=[];
for (var key in obj){
a.push(key+':'+obj[key]);
}
console.log(a.join(','));
13.下面的代码输出是?为什么1
2
3
4console.log(a); //变量a声明赋值在调用之后,此处返回undefined,表示声明但值为空
var a=1;
console.log(a);//这里就能正常调用了,返回值为1;
console.log(b);//b未声明,此处报错Error:b is not defined