js语法-Assignment

2016-06-13  本文已影响123人  犯迷糊的小羊

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

2.解释白屏和FOUC

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

js在页面加载时遵循同步加载的原则,就如同HTML在渲染时遵循flow based layout,除非出现float/position/overlfow等改变正常文档流的定位机制。
同理,async和defer都是改变js同步加载的两种方法,可以改变js同步加载导致的网页性能优化问题。

<script src="demo.js" defer="defer"></script>
<script src="demo.js" async="async"></script>

关于二者的加载和执行方式如下图所示:

【注意】无论是defer还是async都仅适用于外部脚本

不同点:
html的版本html4.0中定义了defer;html5.0中定义了async;这将造成由于浏览器版本的不同而对其支持的程度不同;
执行时刻:每一个async属性的脚本都在它下载结束之后立刻执行,同时会在window的load事件之前执行。所以就有可能出现脚本执行顺序被打乱的情况;每一个defer属性的脚本都是在页面解析完毕之后,按照原本的顺序执行,同时会在document的DOMContentLoaded之前执行。

4.简述网页的渲染机制

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

六大数据类型:数值型、字符串型、布尔型、对象、数组、函数
简单类型:数值型、字符串型、布尔型
复杂类型:对象、数组、函数
【注】
1.数组和函数算是广义的对象,null也属于对象
2.NaN是一种特殊的数值

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

0/0//NaN
Math.sqrt(-5)//NaN

也就是说:关于null和undefined的使用场景,object初始化时最好使用null,而基本数据类型最好使用undefined ,但是二者在本质上是没有区别的,是JS的一个bug!

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

typeof 37 === 'number';
typeof "bla" === 'string';
typeof true === 'boolean';
typeof Symbol('foo') === 'symbol';
typeof undefined === 'undefined';
typeof {a:1} === 'object';
typeof [1, 2, 4] === 'object';
typeof function(){} === 'function';
function C(){} 
function D(){} 
var a = new C();
var b = new D();
var bool1=a instanceof C
var bool2=a instanceof D
//bool1是C对象的实例
console.log(bool1)
//bool2不是C对象的实例
console.log(bool2)

8.代码题

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

function isNumber(el){
  if (typeof el === "number"){
    return true;
  } else {
    return false;
  }
}
function isString(el) {
  if (typeof el === "string"){
    return true;
  }  else {
    return false;
  }
}
function isBoolean(el){
  if (typeof el === "boolean"){
    return true;
  } else {
    return false;
  }
}
function isFunction(el){
  if (typeof el === "function"){
    return true;
  }  else{
    return false;
  }
}
var a = 3.14,
    b = "hello world",
    c = false,
    d=function D(){};
console.log(isNumber(a));//true
console.log(isString(b));//true
console.log(isBoolean(c));//true
console.log(isFunction(d));//true
console.log(isNumber(b));//false
console.log(isString(d));//false
console.log(isBoolean(a));//false
console.log(isFunction(c));//false

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

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

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

var a = 1;
a+++a;
//a++ -> a+1=2 ->2+a = 3,即a+++a返回值为3
typeof a+2;
/typeof a -> "number"  -> "number" + 2 -> "number2",即"number2"

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

//for 循环方法
var arr = [3,4,5];
for (i=0;i<arr.length;i++){
  array=Math.pow(arr[i],2);
  console.log(array);
}
//while 循环方法
var i = 0;
 while (i < arr.length){
  array=Math.pow(arr[i],2);
  console.log(array);
  i++;
 }
//do while 循环方法
do {
  array=Math.pow(arr[i],2);
  console.log(array);
  i++;
}while(i < arr.length)

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

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

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

console.log(a);
var a = 1;
console.log(a);
console.log(b);
//相当于
var a;
console.log(a);//undefined
a=1;
console.log(a)//1
console.log(b)//b is not defined

由于js存在变量提升机制,使得a的声明提升至最前面,此时由于a只声明未赋值,所以数据类型为undefined;
到了a=1时,输出1;
最后,由于b为声明,所以控制台报错。

参考资料
网站前端性能优化之javascript和css
js和css放置位置
引用JavaScript文件时的两个属性defer和async
HTML 5 <script> async 属性
HTML 5 <script> defer 属性
instanceof和typeof运算符的区别详解

上一篇 下一篇

猜你喜欢

热点阅读