JS语法
2016-07-12 本文已影响0人
冰哲
CSS和JS在网页中的放置顺序是怎样的?
- CSS样式在网页中应当靠前放置,一般放置在head标签中,一般用link标签或者style标签引入。在加载body之前就加载完css,避免浏览器的白屏和无样式闪烁问题。
- JS放置在body标签的尾部,一般使用script标签引入,一方面因为加载JS时,一般情况下会阻塞页面的渲染,另一方面防止需要操作的DOM的JS不会因为DOM还没有加载完成而出现错误。
解释白屏和FOUC。
- 白屏和无样式闪烁(FOUC)问题,都是浏览器对无样式内容进行渲染时出现的问题。在浏览器还没有得到样式CSS时,有些情况下,即使收到内容,但对于无样式内容不进行渲染,就出现了白屏问题。
- 无样式内容闪烁是浏览器已经渲染收的的无样式内容,这时候突然收样式,然后给页面进行 重新渲染的过程,之前的页面突然呈现出样式,给人的感觉像突然闪了一下。
async和defer的作用是什么?有什么区别?
async和defer是JS脚本异步加载的两种方式:
- defer,加载后续文档元素的过程将和script.js的加载并行进行(异步),但JS的执行要在所有元素解析完成后进行。
- adync,加载和渲染后续文档元素的过程将和JS的加载与执行并行进行。
简述网页的渲染机制?
分为四个阶段:
1 解析代码:将HTML文件解析成DOM,将CSS文件解析成CSSOM。
2 对象合成:将DOM和CSSOM合成一颗渲染树(render tree)
3 布局:计算出渲染树的布局(layout)
4 绘制:将渲染树绘制到屏幕
四部并不是严格按照顺序进行,页面会希望用户尽早看到内容,所以会出现什么都没有加载完毕 浏览器将已经下载的内容先呈现。
JavaScript定义了几种数据类型?那些是简单类型?那些是复杂类型?
JavaScript定义了6种数据类型:
- 数值(number):整数和小数。
- 字符串(string):字符组成的文本。
- 布尔值(boolean):ture和false两个特定值。
- undefined: 表示未定义或者空缺,此处目前没有任何值。
- null:表示空缺,此处应该有一个值但此时未空。
- 对象(object):各种值组成的集合。
五种简单数据类型:number,string,boolean,undefined,null。
一种复杂类型:object。
NAN、null和undefined分别代表了什么?
NAN:表示not a number,表示这不是一个数,可能是除了数以外的任何东西,不于自己相等。
Undefined与null意义非常接近,在if语句中都代表false,undefined == null 结果也为true。区别在于,null是属于对象的,typeof null的结果是 “object”,在理解上,null表示空值,而undefined表示未定义。
typeof 和 instanceof的作用和区别?
- typeof检测一个变量的类型,返回的是变量的类型。
- instanceof某个变量是否是某个对象的实例,返回布尔值。
代码
完成如下代码判断一个变量是否是数字、字符串、布尔、函数。
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
以下代码的输出结果是?
console.log(1 + 1); //2
console.log("2"+"4"); //24
console.log(2+"4"); //24
console.log(+new Date()); //1468288803278
console.log(+"4"); //+4 只有右侧有数字或者字符串,且在 字符串为十进制数时,返回(+/-)+数字
以下代码的输出结果是?
var a = 1;
a+++a; //3 相当于(a++)+a 先自增,在加上a。
typeof a+2; //number2 typeof的优先级高于加法运算,所以先typeof a,在加法运算。
遍历数组,把数组里的打印数组每一项的平方。
var arr = [3,4,5]
for (var i=0;i<arr.length;i++){
console.log(arr[i]*arr[i])
} //9,16,25
遍历 JSON, 打印里面的值
var obj = {
name:'hunger',
sex:'male',
age:28 //name:hunger
} //sex:male
for(var p in obj){ //age:28
console.log(p+":"+obj[p])
}
下面代码的输出是? 为什么?
console.log(a); // undefined 运行过程中,变量提升,var a;会在程序一开始就运行,但不会赋值。
var a = 1;
console.log(a); //1
console.log(b); //ReferenceError: b is not defined