js基础知识

SS和JS在网页中的放置顺序是怎样的?

CSS放入<head>标签中,用link方式引入.因为link在页面加载的同时能加载CSS文件. 
JS放入在<body>标签的最后面,JS如果中途发生阻塞就会停止加载,为了保证基本页面的加载,放在后面.


解释白屏和FOUC

白屏,浏览器空白现象 
1.当把CSS放置在页面底部,有的浏览器需要在html和css加载完毕后再对页面进行渲染,而不会从上到下显示出来. 
2.对于IE浏览器,使用@inmport,即使放入link和页面头部也会出现白屏现象. 
3.把JS放入页面头部,JS在加载过程中会禁止并发,其他资源不能进行加载,出现白屏现象.

FOUC,逐步加载无样式的内容,等CSS加载后页面突然展现样式. 
样式放入页面底部,会造成这样的现象.


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

没有这里两者,JS将会读到就进行加载并执行,并在加载完JS之前阻塞后续的文档加载渲染.asyncdefer使js的加载执行和后续的文档加载渲染能并行进行.

defer,<script defer src="script.js"></script>,在页面元素加载完成之后才进行执行.

async,<script async src="script.js"></script>,在JS加载完成后就执行,不会再等待页面元素是否加载完成.


简述网页的渲染机制 

  1. 解析 HTML 标签, 构建 DOM 树
  2. 解析 CSS 标签, 构建 CSSOM 树
  3. 把 DOM 和 CSSOM 组合成 渲染树 (render tree)
  4. 在渲染树的基础上进行布局, 计算每个节点的几何结构
  5. 把每个节点绘制到屏幕上 (painting)

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


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

NaN属于Number类型,是一种特殊数值,表示一个本来返回数值的操作数为返回数值的情况.1.任何涉及NaN操作都会返回NaN. 2.NaN与任何值都不相等,包括NaN自己.

undefined使用var声明,但未对其初始化.

null表示空指针,也就是不存在的东西.


typeof和instanceof的作用和区别?

typeof是来确定变量是哪种数据类型的操作符,但是对于变量的值是一个对象或null,则typeof返回的都是Object.

  1. var i=null;
  2. var o=new Object();
  3. alert(typeof i) //object
  4. alert(typeof o) //object

instanceof 用来判断一个对象是否是数组或者判断某个变量是否是某个对象的实例,返回布尔值.


代码题


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

  1. function isNumber(el){
  2. if(typeof el==="number"{
  3. return true;
  4. }else{
  5. return false
  6. }
  7. }
  8. function isString(el){
  9. if(typeof el==="string"{
  10. return true;
  11. }else{
  12. return false;
  13. }
  14. }
  15. }
  16. function isBoolean(el){
  17. if(typeof el==="boolean"{
  18. return true;
  19. }else{
  20. return false;
  21. }
  22. }
  23. function isFunction(el){
  24. if(typeof el==="function"{
  25. return true;
  26. }else{
  27. return false;
  28. }
  29. }
  30. var a = 2,
  31. b = "jirengu",
  32. c = false;
  33. alert( isNumber(a) ); //true
  34. alert( isString(a) ); //false
  35. alert( isString(b) ); //true
  36. alert( isBoolean(c) ); //true
  37. alert( isFunction(a)); //false
  38. alert( isFunction( isNumber ) ); //true

以下代码的输出结果是?

  1. console.log(1+1);
  2. console.log("2"+"4");
  3. console.log(2+"4");
  4. console.log(+new Date());
  5. console.log(+"4");
  6. console.log(1+1); //2
  7. console.log("2"+"4"); //"24"
  8. console.log(2+"4"); //"24"
  9. console.log(+new Date()); //1467006173037
  10. console.log(+"4"); //4

以下代码的输出结果是?

  1. var a = 1;
  2. a+++a;
  3. typeof a+2;
  4. var a = 1;
  5. a+++a;// a++结果为2,2+a结果为3.即3
  6. typeof a+2;//"number"+2,即"number2"

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

  1. var arr = [3,4,5]
  2. // todo..
  3. // 输出 9, 16, 25
  4. var arr = [3,4,5]
  5. for(var i=0;i<arr.length;i++){
  6. array=Math.pow(arr[i],2);
  7. console.log(array);
  8. }


遍历 JSON, 打印里面的值

  1. var obj = {
  2. name: 'hunger',
  3. sex: 'male',
  4. age: 28
  5. }
  6. //todo ...
  7. // 输出 name: hunger, sex: male, age:28
  8. var obj = {
  9. name: 'hunger',
  10. sex: 'male',
  11. age: 28
  12. }
  13. for(var r in obj){
  14. console.log(r+":"+obj[r])
  15. }


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

  1. console.log(a);
  2. var a = 1;
  3. console.log(a);
  4. console.log(b);
  5. console.log(a);//undefined
  6. var a = 1;
  7. console.log(a);//1
  8. console.log(b);//error

js的变量提升机制,让第一个相当于

  1. var a ;
  2. console.log(a);

b由于未进行声明,所以报错.

  1. 图片懒加载的原理是什么?
    将一张空白图片或者正在加载的图片保存在img的src属性中,将需要展示的图片放在img的自定义属性中,判断图片是否在可视范围,若不在,则不加载,等图片进入可视范围后再把自定义属性中的图片替换到src属性中;起到性能优化的作用
  2. 1. nodejs 是什么?可以做什么?为什么擅长做?

    • Node.js不是一个JS应用,并且是一个C++编写成的一个基于V8引擎的JS运行环境,本质就是把浏览器的JS解释器封装起来作为服务器运行平台,用类似javascript的结构语法进行编程操作后端,
    • Node.js是一个后端的JS运行环境,这就可以让你在编写系统或者服务端的JS代码,交给Node.js来解释执行;
    • Node.js采用事件驱动、异步编程、为网络服务而设计,Node.js的设计思路是以事件驱动为核心,充分利用了系统资源,执行代码不需要阻塞等待某种操作完成,有限的资源可以用于其他的任务,在服务器开发中,并发的请求处理是一个大问题,阻塞式的函数会导致资源浪费和时间延迟,通过事件注册、异步函数

    2. npm 是什么? 如何安装 node 应用?全局安装和本地安装有什么区别? --save与–saveDev的区别? node_module的查找依赖的路线是怎样的?

    • npm:node package manager,通称为node包管理器,主要用于管理node包,包括:安装、卸载、更新、查看、搜索、发布等;
    • 下载nodejs,就会自动得到npm,使用npm install 模块名命令安装node应用。
    • 全局安装和本地安装有什么区别:
      • 1.全局安装:npm install -g xxx,模块将会被下载安装到全局目录中,这个全局目录可以用npm config set prefix来设置,通过npm config get prefix获取,安装的package能够在所有的目录下使用;
      • 2.本地安装:npm install xxx,模块会被下载到当前的目录,当然也只能在当前目录下使用,跑到别的目录去之后,你安装的包就无法运行;安装xxx之后,当前目录下面就会多出一个node_modules目录,xxx就会被安装在里面,然后在控制台输出一些信息;
      • 当你为你的模块安装一个依赖模块时,一般的流程是先安装他们,然后连同版本号手动将他们添加到模块配置文件package.json的依赖里(dependencies);
    • –save和-saveDev的区别:
      • 1.-save和save-dev可以省掉你手动修改package.json文件的步骤。
      • 2.我是全局安装之后,再CD到我自己的目录,结果提示找不到package.json,我是通过CD到自己的目录,npm init然后一步步输入,最后才有这个json;
      • 3.npm install -save module-name自动把模块和版本号添加到dependencies部分,产品依赖模块
      • 4.npm install -save-dev module-name自动把模块和版本号添加到devdependencies部分,开发依赖模块
      • 5.至于配置文件区分这俩部分,是用于区别产品依赖模块和开发依赖模块;
    • node_module的查找依赖的路线:
      先从本地文件中找,找不到就往上级目录中找,再找不到就往上上级目录中找,直到系统根目录。所以全局安装后的模块可以在所有的目录下使用,怎么感觉有点像函数内部的局部变量 = = !

    3. 安装browser-sync并了解它的使用方式

    • 1.安装:通过npm install -g browser-sync安装,我这边加了sudo
    • 2.开启:输入browser-sync start --server --files 'css/*.css'如果除了兼容css之后,还需要监控html的话;
      broeser-sync start -server --files 'css/*.css,*.html';注意这里有相对路径的,是继续你CD的目录开始跳跃
    • 3.Tips:
      • 1.开启之前,记得CD到你的Html所在的目录,再开启,要不然就会出现CANNOT GET;
      • 2.直接start的话,然后你的Html名称不是index.html,也会出现CANNOT GET;
      • 3.并不是IDE里面写什么马上浏览器就变了,要么是点击浏览器切换到浏览器,要么在IDE里面保存一下,浏览器才会改变

    4. 什么是前端构建,有哪些常见的前端构建工具?

    构建工具在我的理解之中就是自动化,再直白一点就是可以"偷懒",当一个页面的文件足够多的时候, 拆分文件为单个的模块会比较好, 然后在发布的时候, 对拆分后的各模块进行合并, 再根据优化规则, 尽量减小文件大小, 这时候又需要对文件进行压缩之类的操作,而这些构建工具,就是帮助你通过配置或者编写约定好的代码, 来自动完成你上面的这些功能的一个工具;
    常见前端构建工具:Grunt,gulp,webpack,Yeoman;

    5.代码

    踩的坑:

    • 1.全局安装gulp之后,再你CD到的目录之后,再npm init一下,要不然你的目录没有package.json;
    • 2.如果不做第一步,npm install -save-dev module-name之后,只会提示你找不到package.json;
    • 3.html中,把css和js的src都给改写成被压缩后的地址;
    • 4.如果同时依赖模块,然后text/javascript又要去用,必须在gulpfile.js中的每一个task中加一个return,要不然你依赖模块的接口,就是未定义;
    • 5.我按照老师写得最后一项的,结果被提示task少一个dafault,所以我改写成了gulp.task('default',['html','css','js','pic','font']);,在控制台输入gulp之后,压缩的所有资源正常运行了;

    Github


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

推荐阅读更多精彩内容

  • 1.CSS和JS在网页中的放置顺序是怎样的?为什么会出现白屏和FOUC? 在写HTML代码时,我们都是将CSS文件...
    26d608950683阅读 626评论 0 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,716评论 2 17
  • 问答 1、CSS和JS在网页中的放置顺序是怎样的? 一般来说css 放在Head标签里;Js放在body标签里最后...
    Maggie_77阅读 240评论 0 0
  • 问答题 1.CSS和JS在网页中的放置顺序是怎样的? CSS: JS: 放在html后面, 之前 2.解释白屏和F...
    风骨来客阅读 379评论 0 0
  • 三十二真情告白 苏咏馨回到家里,很有些心慌意乱。难道自己也要开始谈恋爱了吗?那日与安亦在床上缠绵的感觉又浮上了她的...
    冬妮娅阅读 258评论 0 0