typeof 1
的结果是什么?
- number
typeof "hello"
的结果是什么?
- string
typeof true
的结果是什么?
- boolean
typeof undefined
的结果是什么?
- undefined
typeof null
的结果是什么?
- object
typeof []
的结果是什么?
- object
typeof {}
的结果是什么?
- object
typeof function(){}
的结果是什么?
- function
简单介绍 JavaScript的发展历史。
目的:浏览器需要一种可以嵌入网页的脚本语言,- 用来控制浏览器行为
诞生:1995年5月,Brendan Eich只用了10天,就设计完成了这种语言的第一版。
- 语法:
- 基本语法:借鉴C语言和Java语言。
- 数据结构:借鉴Java语言,包括将值分成原始值和对象两大类。
- 函数的用法:借鉴Scheme语言和Awk语言,将函数当作第一等公民,并引入闭包。
- 原型继承模型:借鉴Self语言(Smalltalk的一种变种)。
- 正则表达式:借鉴Perl语言。
- 字符串和数组处理:借鉴Python语言。
- 版本
- 1997年7月,ECMAScript 1.0发布。
- 1998年6月,ECMAScript 2.0版发布。
- 1999年12月,ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。
- 2007年10月,ECMAScript 4.0版草案发布,对3.0版做了大幅升级,预计次年8月发布正式版本。草案发布后,由于4.0版的目标过于激进,各方对于是否通过这个标准,发生了严重分歧。以Yahoo、Microsoft、Google为首的大公司,反对JavaScript的大幅升级,主张小幅改动;以JavaScript创造者Brendan Eich为首的Mozilla公司,则坚持当前的草案。
- 2008年7月,由于对于下一个版本应该包括哪些功能,各方分歧太大,争论过于激进,ECMA开会决定,中止ECMAScript 4.0的开发(即废除了这个版本),将其中涉及现有功能改善的一小部分,发布为ECMAScript 3.1,而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为Harmony(和谐)。会后不久,ECMAScript 3.1就改名为ECMAScript 5。
- 2009年12月,ECMAScript 5.0版正式发布。Harmony项目则一分为二,一些较为可行的设想定名为JavaScript.next继续开发,后来演变成ECMAScript 6;一些不是很成熟的设想,则被视为JavaScript.next.next,在更远的将来再考虑推出。TC39的总体考虑是,ECMAScript 5与ECMAScript 3基本保持兼容,较大的语法修正和新功能加入,将由JavaScript.next完成。当时,JavaScript.next指的是ECMAScript 6。第六版发布以后,将指ECMAScript 7。TC39预计,ECMAScript 5会在2013年的年中成为JavaScript开发的主流标准,并在此后五年中一直保持这个位置。
- 2011年6月,ECMAscript 5.1版发布,并且成为ISO国际标准(ISO/IEC 16262:2011)。到了2012年底,所有主要浏览器都支持ECMAScript 5.1版的全部功能。
- 2013年3月,ECMAScript 6草案冻结,不再添加新功能。新的功能设想将被放到ECMAScript 7。
- 2013年12月,ECMAScript 6草案发布。然后是12个月的讨论期,听取各方反馈。
- 2015年6月,ECMAScript 6正式发布,并且更名为“ECMAScript 2015”。这是因为TC39委员会计划,以后每年发布一个ECMAScirpt的版本,下一个版本在2016年发布,称为“ECMAScript 2016”。
除了ECMAScript的版本,很长一段时间中,Netscape公司(以及继承它的Mozilla基金会)在内部依然使用自己的版本号。这导致了JavaScript有自己不同于ECMAScript的版本号。1996年3月,Navigator 2.0内置了JavaScript 1.0。JavaScript 1.1版对应ECMAScript 1.0,但是直到JavaScript 1.4版才完全兼容ECMAScript 1.0。JavaScript 1.5版完全兼容ECMAScript 3.0。目前的JavaScript 1.8版完全兼容ECMAScript 5。
样式、JS 在 HTML 中如何放置?
css和js的正确摆放均是为了提高页面的加载效率。
- css的放置位置
- css应该放置在head中,用style标签引入。这是因为,页面渲染时,只有相应CSSOM Tree完成后,才开始之后的布局(layout)并将页面显示,如果将css放置在尾部,前面DOM tree加载过久(内容过多,或者请求资源超时)的话,可能导致白屏时间变长。
- js的放置位置
- 除了一些在页面执行前必须加载的js以外,大多数js应该放置在body标签内的尾部。这主要是因为js会阻塞其后内容的加载和呈现,导致白屏。此外,js的执行过程可能作用于dom tree内的元素,如果放置在前面会报错。
- 为了避免js阻塞其后内容,可以根据具体需求使用参数async或defer,使JS异步加载。
- async,加载和渲染后续元素的过程将和js文件的加载与执行并行进行,async的js元素下载完后立刻执行,不同js的先后执行顺序很可能与页面中的出现次序不同。
- defer,加载后续文档元素的过程将和js的加载并行进行,但js的执行要等到所有元素解析完成之后,DOMContentLoaded事件触发之前完成。
如何判断一个变量是否是数字、字符串、布尔、函数?
- 运用
typeof
运算符来判断
JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?
- ES6之前定义了5种数据类型分别是
- number
- string
- boolean
- null
- undifined
- object
- ES6又加上了symbol这个数据类型
- 通常,我们将数值、字符串、布尔值称为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了
- 而将对象称为合成类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。至于undefined和null,一般将它们看成两个特殊值。
网友评论