日夜谈——js语法

今天我终于踏入JS的大门,想起来,真有点小兴奋,不过,听说大伙都说JS不太容易学懂,But I will try to learn it。

New day

<h3>1.CSS和JS在网页中的放置顺序是怎样的?</h3>
CSS一般放在head标签里面,JS一般放在body标签的尾部。
原因:
<li>因为CSS在加载时,是并发加载,并发请求,不会阻碍其他资源同时加载,而JS加载时,会禁止并发,因此JS加载时,会阻塞其他资源的加载,只有等JS加载完之后,才能加载其他资源,因此把JS放在顶部会出现白屏现象,把CSS放在尾部,会出现FOUS(无样式内容闪烁),因此从用户体验和优化网页性能这点看,应该将CSS放在顶部,JS放在尾部。
</br>

<h3>2.解释白屏和FOUC</h3>
<li>白屏——所谓的白屏,是指CSS加载时间过长,而HTML加载在CSS之后,因此会导致网页出现白屏——啥内容都没有,白茫茫一片。
1.如果把样式放在底部,对于IE浏览器,在某些场景下(新窗口打开,刷新等)页面会出现白屏,而不是内容逐步展现。
2.如果使用 @import标签,即使 CSS 放入 link, 并且放在头部,也可能出现白屏;
3.把js放在顶部也会出现白屏现象,因为加载 JavaScript 时,会禁用并发,并且阻止其他内容的下载.
<li>FOUC,全称叫做Flash of Unstyled Content,中文名为无样式内容闪烁,如果把样式放在底部,对于IE浏览器,在某些场景下(点击链接,输入URL,使用书签进入等),会出现 FOUC 现象(逐步加载无样式的内容(即html的内容),等CSS加载后页面突然展现样式).对于 Firefox 会一直表现出 FOUC .
</br>
<h3>3.async和defer的作用是什么?有什么区别</h3>
<li>defer:defer是script标签中处理脚本运行的属性之一,中文称作延时,作用是js在页面加载后才会运行脚本,即加载页面的同时加载js,加载完页面之后才1执行js。

<script src="dome.js" defer="defer"></script>

<li>async:async(HTML5)是script标签中处理脚本运行的另一属性,中文称作异步,作用是脚本会异步加载而不阻塞页面加载,并且js一旦下载完毕就会立即执行。

<script src="dome.js" async="async"></script>

另外async和defer 属性仅适用于外部脚本(只有在使用 src 属性时)。

defer和async.png

<li>区别:
1.html的4.0版本定义defer,到了html5.0定义anysc,这就造成浏览器的版本不同,对其的支持力度也就不同。
2.每一个async属性的脚本都在它下载结束之后立刻执行,同时会在window的load事件之前执行。所以就有可能出现脚本执行顺序被打乱的情况;每一个defer属性的脚本都是在页面解析完毕之后,按照原本的顺序执行,同时会在document的DOMContentLoaded之前执行。
</br>
<h3>4.简述网页的渲染机制</h3>
<b>a:</b>解析 HTML 标签, 构建 DOM 树。
<b>b:</b>解析 CSS 标签, 构建 CSSOM 树。
<b>c:</b>把DOM树和CSSOM树组合城(render tree)。
<b>d:</b>在渲染树的基础上进行布局, 计算每个节点的几何结构。
<b>e:</b>把每个节点绘制到屏幕上 (painting)。

webkit主流程.png

<h3>5.JavaScript 定义了几种数据类型? 哪些是简单类型?哪些是复杂类型?</h3>
JavaScript语言的每一个值,都属于某一种数据类型。JavaScript的数据类型,共有六种。
即:
<li>数值(number):整数和小数(比如1和3.14)
<li>字符串(string):字符组成的文本(比如"Hello World")
<li>布尔值(boolean):true(真)和false(假)两个特定值
<li>undefined:表示“未定义”或不存在,即此处目前没有任何值
<li>null:表示空缺,即此处应该有一个值,但目前为空
<li>对象(object):各种值组成的集合

其中简单类型:
<li>数值(number)
<li>字符串(string)
<li>布尔值(boolean)
<li>undefined
<li>null

复杂类型:
<li>对象(object)

对象(object)又可以分成三个子类型。
<li>狭义的对象(object)
<li>数组(array)
<li>函数(function)
</br>
<h3>6.NaN、undefined、null分别代表什么?</h3>
NaN:表示Not a Number,不是一种独立的数据类型,而是一种特殊数值,它的数据类型依然属于Number,只不过数值计算时不符合计算法则。

undefined:表示“缺少值”,就是此处应该有一个值,但是还没有定义;

null:是一个表示"无"的对象,转为数值时为0;

</br>
<h3>7.typeof和instanceof的作用和区别?</h3>
typeof的作用是:用以获取一个变量或者表达式的数据类型。主要用来判断一个变量是否存在
返回结果如下:

typeof 12 === "number"
typeof "interest" === "string"
typeof ture === "boolean"
typeof  undefined === undefined
typeof {a:1} === "object"
typeof [1, 2, 3] === 'object'
typeof function(){} === 'function';

instance of用来判断一个变量是否是某个对象的实例。返回结果:boolean值,true或false。

typeof和instance of.png

<h3>8.代码题</h3>
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 ture;
}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()); //1479451763255
console.log(+"4"); //4

3.以下代码的输出结果是? (难度***)

var a = 1;
a+++a;
//a++=1>a=a+1=2>(a++)+a=3
typeof a+2;
//typeof a>"number">typeof "number"+2>number2

4.遍历数组,把数组里的打印数组每一项的平方 (难度**)

var arr = [3,4,5]
// todo..
// 输出 9, 16, 25 

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

5.遍历 JSON, 打印里面的值 (难度**)

var obj = {
  name: 'hunger',
  sex: 'male',
  age: 28
};
for (var 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未赋值,因此第一个console.log(a)输出结果为undefined,之后a=1,轮到第二个console.log(a)输出结果为一,而最后的console.log(b)未声明,因此控制台报错:b is not defined

参考资料:

<a href="http://www.haorooms.com/post/web_xnyh_jscss">网站前端性能优化之CSS和JS</a>

<a href="http://www.w3school.com.cn/tags/att_script_async.asp">HTML 5 <script> async 属性</a>

<a href="http://w3school.com.cn/html5/att_script_defer.asp">HTML 5 <script> defer 属性</a>

<a href="http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html">阮一峰undefined与null的区别</a>

<a href="http://blog.sina.com.cn/s/blog_b2bdfef80102v3qt.html">js中typeof和instanceof的区别
</a>

注:版权归饥人谷和饥人谷peter所有,若有转载,请注明出处

感谢吃瓜子观众:


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

推荐阅读更多精彩内容

  • JavaScript基本概念、基础数据类型、运算符、流程控制语句。 一、CSS和JS在网页中的放置顺序是怎样的? ...
    婷楼沐熙阅读 434评论 0 2
  • 1.CSS和JS在网页中的放置顺序是怎样的? CSS一般放在head标签,因为CSS加载时可以并发请求(IE6除外...
    犯迷糊的小羊阅读 1,032评论 1 1
  • CSS和JS在网页中的放置顺序是怎样的? CSS一般放置于网页开头,head标签内。 JS一般放置于网页最后,bo...
    Nicklzy阅读 599评论 0 50
  • 1.CSS和JS在网页中的放置顺序是怎样的? 将CSS link标签放在html文档靠前位置。JS代码放在html...
    饥人谷区子铭阅读 336评论 0 1
  • 1.CSS和JS在网页中的放置顺序是怎样的?为什么会出现白屏和FOUC? 在写HTML代码时,我们都是将CSS文件...
    26d608950683阅读 632评论 0 0