任务16-JS语法,JS基础知识1

1.CSS和JS在网页中的放置顺序是怎样的?为什么会出现白屏和FOUC?

在写HTML代码时,我们都是将CSS文件的引入位置放在头部(<head>标签内部),将js文件的引入位置放在底部(</body>前面)。
出现白屏的原因:
CSS:未将CSS置于首部,浏览器加载页面过程中,首先加载了html内容,此时还未加载CSS,需将CSS完全加载完成,页面才会显示出来(白屏现象)。
另一种浏览器的加载方式是先对页面内容进行展示,然后再加载CSS修改页面样式(FOUC: flash of unstyled )。 若是使用@import ,即使把此样式放在顶部,也可能会出现白屏。

JS: 由于JS的特性,如果把JS放在页面顶部,在JS未加载完成之时,脚本就会阻塞后面组件的加载,从而出现白屏问题。


2.加载异步:async和defer的作用是什么?有什么区别

如果在某些场景下,需要将JS不置于页面底部,此时就要使用 async或defer 来做异步处理。
<script defer src="script.js"></script>
<script async src="script.js"></script>
defer: 加载JS与页面并行进行,但是要在页面元素解析完成之后,defer才会被执行。
async:加载JS与页面并行进行,对页面的渲染也会并行进行。


3.简述网页的渲染机制

1、Create/Update DOM And request css/image/js:浏览器请求到HTML代码后,在生成DOM的最开始阶段(应该是 Bytes → characters 后),并行发起css、图片、js的请求,无论他们是否在HEAD里。
2、Create/Update Render CSSOM:CSS文件下载完成,开始构建CSSOM
3、Create/Update Render Tree:所有CSS文件下载完成,CSSOM构建结束后,和 DOM �一起生成 Render Tree。
4、Layout:有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系。下一步操作称之为Layout,顾名思义就是计算出每个节点在屏幕中的位置。
5、Painting:Layout后,浏览器已经知道了哪些节点要显示(which nodes are visible)、每个节点的CSS属性是什么(their computed styles)、每个节点在屏幕中的位置是哪里(geometry)。就进入了最后一步:Painting,按照算出来的规则,通过显卡,把内容画到屏幕上。

浏览器渲染页面顺序.jpg

4.JavaScript 定义了几种数据类型? 哪些是简单类型?哪些是复杂类型?NaN、undefined、null分别代表什么?

简单类型:

<li>数字 number
<li>字符串 string
<li>布尔 boolean
<li>数组 (数组也是对象)
<li>未定义 undefined

复杂类型:

<li>对象 object

NaN:

Number.NaN 是一个特殊值,说明某些算术运算(如求负数的平方根)的结果不是数字。
JavaScript 以 NaN 的形式输出 Number.NaN。NaN 与其他数值进行比较的结果总是不相等的,包括它自身在内。因此,不能与 Number.NaN 比较来检测一个值是不是数字,而只能调用 isNaN() 来比较。

undefined:

表示未赋值,比如说 var = a 占据了空间,却未对 a 赋值。

null:

表示一个不存在的元素,空指针。


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

typeof:

作用是查看元素类型。它返回值是一个字符串,该字符串说明运算数的类型。typeof 一般只能返回如下几个结果:
返回值:
数字:number
字符串:string
布尔:boolean
函数:function
undefined: function
其他值全部为 object
例:

通过typeof来获取一个变量的类型
通过typeof来获取一个变量素是否存在

instanceof:

判断一个变量的类型常常会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。这就需要用到instanceof来检测某个对象是不是另一个对象的实例。
instanceof用于判断一个变量是否某个对象的实例,其返回值是布尔类型。
例:
a instanceof b?console.log"true"):conlose.log("false"); //a是b的实例?真:假


代码题:

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 = 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());//1470630425859
console.log(+"4");//4

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

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

4.遍历数组,把数组里的打印数组每一项的平方
```var arr = [3,4,5]```

![](http://upload-images.jianshu.io/upload_images/2399926-c7744b31362292ac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.遍历 JSON, 打印里面的值 (难度**)

var obj = {
name: 'hunger', sex: 'male', age: 28
}
//todo ...
// 输出 name: hunger, sex: male, age:28```


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

console.log(a);//1,js变量提升
var a = 1;// 1
console.log(a); // 1, 通过var a = 1;进行声明并赋值,调用a后,得到 1
console.log(b);//b is not defined,未对 b 进行声明。

<li>关于变量提升:

var v='Hello World'; 
(function(){ 
alert(v); 
})() // 输出 Hello World

但是:

var v='Hello World'; 
(function(){ 
alert(v);
 var v='I love you';
 })() ```
却会输出  undefined
其原因是作用域的问题,变量提升,就是把变量提升提到函数的top的地方。变量提升 只是提升变量的声明,并不会把赋值也提升上来。 
其实只是:

var v='Hello World';
(function(){
var v;
alert(v);
v='I love you';
})() ```


本文版权归本人和饥人谷所有,转载请注明来源。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,727评论 2 17
  • 问答题 CSS和JS在网页中的放置顺序是怎样的?答:css:通过link标签将样式表放在 中。js:放在 中尾部。...
    饥人谷_桶饭阅读 283评论 0 0
  • CSS和JS在网页中的放置顺序是怎样的? CSS一般放置于网页开头,head标签内。 JS一般放置于网页最后,bo...
    Nicklzy阅读 599评论 0 50
  • SS和JS在网页中的放置顺序是怎样的?CSS放入<head>标签中,用link方式引入.因为link在页面加载的同...
    love2013阅读 629评论 0 0
  • 陈玲焦点网络中级四期坚持分享!第903天 今天学了奇妙的外化技术,将情绪用物品来代替,当情绪从人体中分离出来的时...
    煙花阅读 367评论 0 0