Javascript包含ECMAScript(核心语言)和DOM(访问和操作网页内容和方法的接口)和BOM(与浏览器交互的方法和接口)
ECMAScript:浏览器是ECMAScript实现可能的宿主环境(不仅提供实现,还提供扩展如DOM)之一(可能还包括Node和Adobe Falsh)。JavaScript和Adobe ActionScript都实现了ECMAScript。
DOM:针对XML经过扩展用于HTML的API。DOM把整页映射为一个多层节点结构。通过DOM的api开发人员可以增删改查任何节点。
DOM由DOM核心(如何映射基于xml文档结构,简化对文档访问和操作)、DOM HTML(在DOM Core基础上扩展添加针对HTML的对象和方法)、鼠标和用户界面事件、范围、遍历,以及对css的支持、加载保存模块中定义,新增了验证文档方法。
BOM:控制ie显示页面以外的部分。处理ie窗口和框架。
在html中使用js
使用<script>需注意:遇到</script>可能会结束,如文档需要,可以加上转义字符<\/script>
标签内部执行顺序,会从上到下依次解释
放到head里面会等到js文件完全执行完才加载body元素,可以放到body后面,这样页面内容加载完毕才加载js文件
尽量用外部文件来包含js代码
<script>元素属性:
type=”text/javascript”(默认值)或”text/ecmascript”(不经常用)
“application/javascript”或”application/javascript”(非ie)
“application/x-javascript”(服务器端传送脚本,可能导致脚本被忽略)
src:引入外部js文件,需注意,若引入外部文件,内部还有js代码,则解释内部js代码,外部将不执行。
charset:src外部文件的字符集
defer="defer"属性只适用于外部脚本。用途是在head标签里的js脚本不影响页面构造,脚本会被延迟到整个页面都解析完毕后再运行。即相当于告诉浏览器立即下载,但延迟执行。会遇到html结束标签再执行,最好只包含一个延迟,把延迟脚本放在页面底部仍然是最佳选择。但是延迟脚本间并一定会按照顺序执行。
async:只适用于外部脚本。async表示异步执行外部脚本,边加载js文件页面边解析。异步脚本一定会在页面的load 事件前执行,但可能会在DOMContentLoaded 事件触发之前或之后执行。建议异步脚本不要在加载期间修改DOM。
在不支持<script>元素的ie中隐藏js代码,就是把js代码包含在一个html注释中。<script><!--
function sayHi(){
alert("Hi!");
}
//--></script>
<noscript>元素:浏览器不支持脚本(替代内容);浏览器支持脚本,脚本被禁用。上面两种情况会显示noscript里面内容。
语法
ECMAScript一切(变量、函数名、操作符)都区分大小写
标识符:变量、函数、属性的名字、函数参数都采用驼峰大小写即第一个字母小写,剩下的每个单词首字母都大写。
未初始化变量为undefined
使用var在函数中定义的变量,在函数退出后被销毁
省略var操作符在函数中定义的变量为全局变量。只要调用一次该函数,变量就有定义,可以在函数外部任何地方被访问。(在严格模式下,会报错,不建议使用)
ECMAScript有5中简单数据类型(Undefined、Null、Boolean、Number、String)和一种复杂数据类型Object(无序键值对)
typeof返回值:undefined(未定义)、boolean(布尔值)、string(字符串)、number(数值)、object(对象或null)、function(函数)。Eg:typeof(message)或typeofmessage都可以因为typeof是一个操纵符,不是函数,圆括号可以使用,但不是必须的。
var message; // 这个变量声明之后默认取得了undefined 值
// 下面这个变量并没有声明
// var age
alert(message); // "undefined"
alert(age); // 产生错误
var message; // 这个变量声明之后默认取得了undefined值
// 下面这个变量并没有声明
// var age
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"
Null类型:空对象指针,因此使用typeof操作符检测返回object。如果将来变量用来保存对象,最好将该变量初始化为null。Undefined值派生自null,进行==判断结果为true
Boolean类型:ECMAScript所有类型都可以转化为boolean,可用转型函数Boolean();
非空字符串、非零数字、任何对象、都会返回true。空字符串、0、null、undefined会返回false。
Number类型:八进制第一位为0、十六进制前两位为0x。
String类型:可用“或’。字符串一旦创建值不可改变,改变的是引用,销毁原来字符串,引向新的字符串。Null和undefined没有tostring方法可以用String返回这两个值的字面量。
Object类型:ECMAScript中对象是一组数据和功能的集合。