js基础——基本概念、数据类型、运算符、流程控制语句

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

CSS和JS在网页中的放置顺序

二、解释白屏和FOUC

  • 白屏问题

    如果把样式放在底部,对于IE浏览器,在某些场景下(新窗口打开、刷新等)页面会出现白屏,而不是内容逐步展现;
    如果使用@import标签,即使CSS放入link,并且放在头部,也可能出现白屏;
    把JavaScript放入页面顶部时会阻塞其后内容的呈现,所以也会导致白屏现象。

  • FOUC(Flash Of Unstyled Content)无样式内容闪烁

    如果把样式放在底部,对于IE浏览器,在某些场景下(点击链接,输入URL,使用书签进入等),会出现FOUC现象(逐步加载无样式的内容,等CSS加载后页面突然展现样式)。对于Firefox会一直出现FOUC。

三、asyncdefer的作用是什么?有什么区别

  • asyncdefer的作用
    当浏览器碰到script脚本的时候:
    1. <script src="script.js"><script>
      没有deferasync,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该script标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。
    2. <script async src="script.js"><script>
      async,加载和渲染后续文档元素的过程将和script.js的加载与执行并行进行(异步)。
    3. <script defer src="script.js"><script>
      defer,加载后续文档元素的过程将和script.js的加载并行进行(异步),但script.js的执行要在所有元素解析完成之后,DOMContentLoad事件触发之前完成。
  • asyncdefer的区别
    • defer:脚本延迟到文档解析和显示后按顺序执行,有顺序
    • async:脚本的执行不保证顺序,只要加载完了就会立刻执行

四、简述网页的渲染机制

网页的渲染主要分为以下几步:

  • 解析html构建DOM树
  • 解析CSS构建CSSOM树
  • 把DOM和CSSOM组合成渲染树(Render Tree)
  • 在渲染树的基础上进行布局,计算每个节点的几何结构(Layout Tree)
  • 把每个节点绘制到屏幕上(Painting)


当浏览器从服务器接收到了html文档,并把html在内存中转换成DOM树,在转换过程中如果发现某个节点上引用了CSS或者image,就会再发一个request去请求CSS或image,然后继续执行下面的转换,而不需要等待request的返回,当request返回后,只需要把返回的内容放入到DOM树中对应的位置就可以了。但当引用了JS的时候,浏览器发送一个JS request就会一直等待该request的返回。

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

JavaScript的数据类型共有六种:

  • 数值(Number):整数和小数(比如1和3.14)
  • 字符串(String):字符组成的文本(比如“Hello World”)
  • 布尔值(Boolean):true(真)false(假)两个特定值
  • Undefined:表示“未定义”或不存在,及此处目前没有任何值
  • Null:表示空缺,及此处应该有一个值,但目前为空
  • 对象(Object):各种指组成的集合

其中有5种简单数据类型(基本数据类型):数值(Number)、字符串(String)、布尔值(Boolean)、Undefined、Null;

1种复杂数据类型:对象(Object)

对象又可以分成三个子类型:

  • 狭义的对象(Object)
  • 数组(Array)
  • 函数(Function)

六、NaN、undefined、null分别代表什么?

  • NaN:即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况

NaN有两个特点:
* 任何涉及NaN的操作(例如NaN/10)都会返回NaN
* NaN与任何值都不相等,包括NaN本身

  • undefined:表示不存在值,就是此处不存在任何值。典型的用法是:

    • 变量被声明了,但没有赋值时,这个变量的值就是undefined
    • 调用函数时,应该提供的参数没有提供,该参数等于undefined
    • 对象没有赋值的属性,该属性的值为undefined
    • 函数没有返回值时,默认返回undefined
  • null:表示空值,即该处的值现在为空。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回“object”的原因,如下面例子所示:


    如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象引用,如下面的例子所示:

      if(car != null){
          //对car对象执行某些操作
      }
    

七、typeofinstanceof的作用和区别?

  • typeof:用于获取给定变量的数据类型。对一个值使用typeof操作符可能返回下列某个字符串:

    • “undefined”——如果这个值未定义;


    • “boolean”——如果这个值是布尔值;


    • “string”——如果这个值是字符串;


    • “number”——如果这个只是数值;


    • “object”——如果这个值是对象或null
    • “function”——如果这个值是函数;

      我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a),因为如果a不存在(为声明)则会出错,对于ArrayNull等特殊对象使用typeof一律返回object,这正是typeof的局限性。
  • instanceof:用于判断一个变量是否属于某个对象的实例。返回结果为boolean值,truefalse。用法:

      var a=new Array();
      alert(a instanceof Array); //返回true
      alert(a instanceof Object)  //也会返回true,因为Array是object的子类  
    


因为typeof遇到Null、数组、对象时都会返回object,所以我们要判断一个对象是否是数组或判断某个变量是否是某个对象的实例时要选择用instanceof运算符。

代码实例

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


操作符"+"对不同的数据类型有不同的含义:

  • 两个操作数都是数字的时候,会做加法运算
  • 参数中至少有一个是字符串时,会把另外的非字符串参数转换成字符串做字符串拼接
  • 在参数有对象的情况下会调用其valueOftoString
  • 在只有一个字符串参数的时候会尝试将其转换为数字
  • 在只有一个数字参数的时候返回其正数值

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

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

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

var arr = [3,4,5];
for(var i = 0; i < arr.length; i++)
{
    var a = arr[i];
    console.log(a*a);
}

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

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

6.下面代码的输出是?为什么(难度***)

console.log(a);  //undefined
var a = 1;
console.log(a);  //1
console.log(b);  //报错


js变量提升

JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升

由于变量提升,我们如果声明了变量,即使在声明语句前使用也是可以的,只不过其值是初始值undefined


本文版权属吴天乔所有,转载务必注明出处。

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

推荐阅读更多精彩内容