Javascript学习笔记(二)在HTML中使用Javascript

  在HTML中使用Javascript只需一个标签<script>即可,虽然简单,但是里边有很多注意的东西,且听在下慢慢道来。

  首先,使用<script>标签时推荐使用<script></script>,而不是使用<script />,因为后者是XHTML的写法,也许会在某些浏览器中得不到正确解析,比如IE。<script>标签既可以内部嵌入代码,也可以引用外部代码。当两者都存在的时候只会下载并执行外部脚本文件,嵌入的代码将会忽略。这里推荐使用外部脚本,因为外部脚本可维护性强,而且可以被浏览器缓存,大大提高性能。由于<script>标签使用src属性来引入外部JS文档,所以利用这个特性可以实现跨域功能,比如Jsonp。

  <script>标签是会阻塞页面文档解析的,意思就是说,当浏览器读到<script>标签的时候,如果是引入的外部文件则会先执行下载,然后执行逐行解析,这个过程中浏览器一心一意在处理JS代码,所以导致页面停顿在这里,不会加载和显示剩余HTML文档。所以如果将<script>标签置于HTML文档的头部<head>标签里的话,并且恰巧网速又有点慢,捎带着<script>标签里又有个alert什么的,那么恭贺你,浏览此页面的用户此时会优雅地点击浏览器的小红叉以示敬意。所以综上所述,将<script>标签放置于<body>的结束标签</body>之前会是一个好的习惯,这样做会解决上边的问题。

  <script>标签中有两个很有意思的属性defer和async,通过这两个属性可以实现延迟脚本异步脚本的功能。

  defer属性用法即在<script>标签中加入defer="defer",这个属性的作用是告诉浏览器,你解析文档的同时可以下载我,但是可以先不执行,等到你把页面都解析完毕了再执行我。defer属性只支持外部脚本。

  async与defer类似,这个属性会告诉浏览器,解析文档和<script>的下载执行完全是异步的,可以同时进行,但是脚本只要下载完毕就开始执行,脚本的执行依旧会阻塞文档解析。

  以前我一直不太明白defer和async区别,直到我看到了这张图(出处为http://segmentfault.com/q/1010000000640869):

  

  当然,不管用defer还是async,将<script>放到</body>标签之前都是一个好习惯。

  当浏览器不支持Javascript(现在基本不存在这种浏览器了)或者尚未开启Javascript功能的时候,利用<noscript>标签,你可以提示用户有多么的愚蠢因为居然不用Javascript,比如:

  

<noscript>
    <p>本页面需要浏览器支持(启用)Javascript。</p>
</noscript>

  最后说一下文档模式,文档模式主要是通过文档类型(doctype)来切换的,最初分为混杂模式(quirks mode,又称怪异模式)和标准模式(standards mode,又称严格模式)。当浏览器发现文档并没有文档类型声明的时候会默认开启混杂模式,混杂模式下浏览器表现和行为差异会非常大,所以推荐都要在HTML文档开始声明文档类型。

  对于标准模式,浏览器会尽可能使文档表现和行为与标准契合,有三种声明方式:

<!-- HTML 4.01 严格型 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<!-- XHTML 1.0 严格型 -->
<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!-- HTML 5  -->
<!DOCTYPE html>

  后来又有准标准模式,使用过渡型(transitional)或框架集型(frameset)文档类型触发,他们的写法就不罗列了,看doctype一目了然。准标准模式与标准模式的表现基本很相近,差异可以忽略不计。

  

  

  

时间: 2024-08-04 18:20:38

Javascript学习笔记(二)在HTML中使用Javascript的相关文章

javascript学习笔记(二)

一.javascript的放置.注释.输出工具 1.输出工具 a.alert():属于window中的全局函数.无论写入什么,都以字符串形式输出. b.document.write():向网页输出内容. c.var vlaue=prompt("显示内容","文本框显示内容")value为返回值:弹出一个输入框,接收参数. <script> alert(123); document.write("<h1>周静文</h1>&

JavaScript高级程序设计(第3版)| 学习笔记(1): 在HTML中使用JavaScript

标签的位置 如果页面需要很多 JavaScript 代码,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白.为了避免这个问题,现代 Web 应用程序一般都把全部 JavaScript 引用放在 <body> 元素中页面内容的后面,如下例所示: <!DOCTYPE html> <html> <head> <title>Example HTML Page</title> </head> <

JavaScript 入门教程二 在HTML中使用 JavaScript

一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script type="text/javascript"> /*  code   */ </script> 三.引用外部 JavaScript 文件的一般写法为: <script type="text/javascript" src=""&

JavaScript学习笔记(三)——this、原型、javascript面向对象

一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化,当然也可以使用call.apply修改this指向的对象.它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用 1.1.JavaScript中函数与方法的区分 在面向过程的语言中我们习惯把完成某个特定功能的代码块称为“函数”或“过程”,当然过程一般没有返回值.在面向对象语言中我们把对象的功能

JavaScript学习笔记二:在HTML中使用JS

1. <script>元素的6个属性:async.defer.charset.language.src.type. 其中只有src最为常用,其他的使用缺省值即可. 2. 通过<script>元素引用外部文件示例: 1 <script src="example.js"></script> 注: a. 为了符合html规范以及浏览器的兼容性,尽量不要写成下面的样式. 1 <script src="example.js"

前端乱煮之javascript学习笔记二

1 javascript的隐式转换规则: 若有布尔类型,则将它转换为数值进行比较. 若有NaN,一律返回false 若是字符串,则分为三种情况:对方为字符串就直接比较,对方为数值,则将字符串转化为数值,若对方为对象,则将对象用toString()的方法进行转换,然后再比较.最后,若是其他,则一律返回false. 若是数字,如果对方是对象,用valueOf()进行比较,其余一律返回false null 和defined不会进行类型转换,但是二者相等. 2 javascript中的break和con

Hibernate学习笔记(二) — 探索 hibernate 中对象的状态

一.hibernate中对象的状态有三种: 临时.游离和持久化,三种状态转化的方法都是通过session来调用的 什么是持久化? 通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存) 二.三种状态的相互转换 session方法 session.save():该方法可以把一个对象从临时装填转换成持久化状态 session.get():从数据库中根据主键提取出一个对象,该对象就是一个持久化状态的对象 session.update():把一

Android第一行代码学习笔记二---在活动中使用Toast

Toast:是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间. 首先需要定义一个弹出Toast触发点,接着笔记一的程序,正好上面有个按钮,我们就点击这个按钮的时候弹出来一个Toast,在onCreate()方法中添加如下代码: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceStat

Javascript 学习 笔记二

1.查找HTML元素 通常,通过 JavaScript,您需要操作HTML 元素. 为了做到这件事情,您必须首先找到该元素.有三种方法来做这件事: 通过id找到HTML元素(本例查找 id="intro" 元素) var x=document.getElementById("intro"); 通过标签名找到HTML元素(本例查找 id="main" 的元素,然后查找 "main" 中的所有 <p> 元素) var

MyBatis学习笔记二:MyBatis生产中使用环境搭建

这里是在上一个环境的基础上修改的,这里就不在给出所有的配置,只给出哪里修改的配置 1.修改POJO对象为注解方式 2.创建Dao层接口 package com.orange.dao; import com.orange.model.Person; public interface PersonDao { // 这里的返回值和方法名必须和PersonMapper.xml中定义的执行语句的id一致 public Person selectPerson(); } 3.修改PersonMapper.xm