一个完整的JavaScript实现应该由下列三个不同的部分组成
核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM)
<script>6个属性:
async:立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。
指定async属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。
异步脚本一定会在页面的load事件前执行。支持异步脚本的浏览器:Firefox,Safari,Chrome
defer:脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。相当于告诉浏览器立即下载但延迟执行。
支持defer属性的浏览器:IE,Firefox,safari,chrome
src:包含要执行代码的外部文件。
type:表示编写代码使用的脚本语言的内容类型(也成为MIME类型)。服务器在传送JavaScript文件时使用的MIME类型通常是application/x-javascript。但在type中设置这个值却可能导致脚本被忽略。另外,在非IE浏览器中还可以使用以下值:application/javascript和application/ecmascript。
考虑到约定俗成和最大限度的浏览器兼容性,目前type属性的值依旧还是text/javascript。如果没有指定,其默认值仍为text/javascript。
使用<script>元素的两种方式:
(1)直接在页面中嵌入JavaScript代码
包含在<script>元素内部的JavaScript代码将被从上至下依次解释。在解释器对<script>元素内部的所有代码求值完毕以前,页面中的其余内容都不会被浏览器加载或显示。
(2)包含外部JavaScript文件
在解析外部JavaScript文件时,页面的处理也会暂时停止。
在<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载、解析和执行完成以后,才能开始呈现页面的内容。这样会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口将是一片空白。为了避免这个问题,现代web应用程序一般都把全部JavaScript引用放在<body>元素中页面内容的后面。
外部文件的优点:如果有两个页面都使用同一个文件,那么这个文件只需下载一次。最终结果能够加快页面加载的速度。
ECMAScript中的一切都区分大小写
标识符:第一个字符必须是一个字母、下划线(_)或一个美元符号($),其他字符可以是字母、下划线(_)、美元符号($)或数字。
ECMAScript标识符采取驼峰大小写格式,第一个字母小写,剩下的每个单词的首字母大写。
严格模式:在顶部添加“use strict”
在严格模式下,ECMAScript的一些不确定性为将得到处理,而且对某些不安全的操作也会抛出错误。
关键字:break,do,instanceof,typeof,case,else,new,var,catch,finally,return,void,continue,for,switch,while,debugger*,function,this,with,default,if,throw,delete,in,try
保留字:
abstract,enum,int,short,boolean,export,interface,static,byte,extends,long,super,char,final,native,synchronized,class,float,package,throws,const,goto,private,transient,debugger,implements,protected,volatile,double,import,public
ECMAScript的变量是松散类型的。
未经初始化的变量会保存undefined值。可以在修改变量值的同时修改值的类型。
省略var变量就成了全局变量(严格模式下会报错)
严格模式下不能定义eval或arguments的变量。
ECMAScript中有五种简单数据类型:undefined、null、boolean、number、string
一种复杂数据类型:object
typeof操作符
undefined 未定义 boolean 布尔值 string 字符串 number 数值 object 对象或null function 函数
var message="11111";
alert(typeof message); //string
alert(typeof 96); //number
alert(typeof null);//object null被认为是一个空的对象引用
typeof 正则表达式 有的浏览器会返回function ,有的会返回object
undefined类型只有一个值就是undefined
undefined和null区分空指针对象和未经初始化的变量
对尚未声明过的变量只能执行一项操作typeof
typeof未经初始化的变量和未声明的变量都会返回undefined
null类型只有一个值null
如果定义的准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
alert(null==undefined)//true undefined值是派生自null的