了解 JavaScript (3)- 马上开始

之前演示了一个 Hello World 程序,而后讲解了一些基础概念,下面开始一些基础工作。

将脚本放在哪里

脚本可以放置在两个位置

  • <head></head>之间,头脚本(header script)
  • <body></body>之间,体脚本(body script)

通过示例学习一些知识,请认真看注释哟。

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>My first script</title>
</head>
<body>
  <h1>
    <script> <!-- 这是 script 开始标签 -->
    //<script> 标签的 language 和 type 属性已经废弃了
    document.write("Hello, world!");
    /*
    这是 JavaScript 第一行,它将获得文档窗口并在其中输出
    “Hello, world!”,语句要以分号结束。
    */
    </script> <!-- JavaScript 的结束标签 -->
  </h1>
</body>
</html>

关于函数

在编写 JavaScript 时常常会用到它们。例如下面的代码:

function saySomething() {
  alert("Four score and seven years ago");
}

函数名后是括号,整个函数程序段包含在大括号之间。


在脚本中添加注释

养成在脚本中添加注释的习惯是一种非常好的做法,方便日后查看和修改。下面的代码演示了两种注释的用法。

// JavaScript Document
/*
  该注释适合比较长的多行注释
*/
function saySomething() {
    //显示一个对话框,弹出信息
  alert("Four score and seven years ago");
}

向用户发出警告

在以后我们的示例代码中的 JavaScript 代码尽量放置在外部文件中,这样容易养成一种习惯。

这里我们学习如何向浏览站点人,弹出一个警告窗口。代码如下:

script_003.html

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>script_003.html / script_003.js</title>
  <script src="script_003.js">
  //我们将 JavaScript 放置在了 script_003.js 文件中
  </script>
</head>
<body>
  <!-- noscript 标签在不支持 JavaScript  和关闭了功能的浏览器上显示-->
  <noscript>
    <h2>This page requires JavaScript.</h2>
  </noscript>
</body>
</html>

script_003.js

alert("Welcome to my JavaScript page!");

这个脚本运行后(Firefox 40),显示一个对话框,如下:


确定用户的选择

向用户提供信息是有用的,但有时候也需要向用户那里获取信息。下面的脚本中将演示如何针对不同的结构执行不同的操作。

script_004.html

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>确定用户的选择</title>
  <script src="script_004.js"></script>
</head>
<body>
</body>
</html>

script_004.js

if (confirm(‘Are you sure you want to do that?‘)) {
  alert(‘You said Yes‘);
} else {
  alert(‘You said No‘);
}

我们可以获得用户操作的结果,如下图:

上图向用户提出一个问题,可以点击“确定”或者“取消”的结果如下图:

 


提示用户

有时候,不是仅希望用户回答 Yes/No,而是希望得到更特定的响应。下面的脚本问了一个问题,然后接受回复,并显示结果。

script_005.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>提示用户</title>
<script src="script_005.js"></script>
</head>
<body>
</body>
</html>

script_005.js

// 使用 var 声明变量,ans 为 prompt() 的结果,也就是输入的文本
var ans = prompt(‘Are you sure you want to do that?‘, ‘‘);
//如果 ans 存在,则显示输入的文本
if (ans) {
  alert(‘You said ‘ + ans);
} else {
  alert(‘You refused to answer‘);
}

执行页面后,提示用户输入一个文本字符串,如下图:

输入后“确定”,显示刚才输入的文本,如下图:


用链接对用户进行重定位

根据用户是否打开 JavaScript 功能,无缝地对用户进行重定向(redirection),就是将用户转到另一个页面。

我们的示例有三个 HTML 页面和一个 JavaScript 页面。

welcome.html,该页面基于链接对用户进行重定向。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome to our site</title>
<script src="welcome.js"></script>
</head>

<body>
  <h2 class="centered">
  <a href="nojswelcome.html" id="redirect">欢迎来到这里,我们将演示无缝地对用户进行重定向(redirection)...</a>
  </h2>
</body>
</html>

welcome.js,通过将重定向功能嵌入代码中,用户甚至不知道你的脚本干预了链接的行为。

// JavaScript Document
window.onload = initAll;

function initAll(){
  document.getElementById("redirect").onclick = initRedirect;
}

function initRedirect(){
  alert(‘你的浏览器支持 JavaScript,将要跳转到 jswelcome.html 页面 ‘);
  window.location = ‘jswelcome.html‘;
  //返回 false 表示停止对用户的单击的处理,这样就不会加载 href 指向的页面。
  return false;
}

jswelcome.html,这是启用了 JavaScript 功能的用户看到的 HTML 页面。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>支持 JavaScript 转到的页面</title>
</head>

<body>
<h1>欢迎来到这里,JavaScript 的世界。</h1>
</body>
</html>

nojswelcome.html,这是没有启用 JavaScript 功能的用户看到的 HTML 页面。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无 JavaScript 的页面</title>
</head>

<body>
<noscript>
  <h2>该页面需要 JavaScript 支持才行哟!</h2》
><noscript>
</body>
</html>

welcome.html 执行后,显示如下:

点击链接,如果用户启用了 JavaScript 功能将会看到下面的警告对话框,如下:

接着“确定”后,转到了 jswelcome.html 页面,如下:

如果用户没有 JavaScript 功能,将会跳转到 nojswelcome.html 页面,如下:

 


使用多级条件

在一个测试中需要两个以上的选择,仅适用 then 和 else 是不够的,更简单的方法是使用 switch / case 语句。

下面的示例根据用户点击的按钮,在警告对话框中返回3段不同的总统语录之一。

multicondition.html,该 HTML 页面建立多级条件的页面。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>使用多级条件</title>
<script src="multicondition.js"></script>
</head>
<body>
<h2>Famous Presidential Quote</h2>
<form action="#">
  <input type="button" id="Lincoln" value="Lincoln">
  <input type="button" id="Kennedy" value="Kennedy">
  <input type="button" id="Nixon" value="Nixon">
</form>
</body>
</html>

multicondition.js,使用 switch/case 构造区分不同的总统语录选择。

window.onload = initAll; //页面加载时,调用 initAll() 函数

//该函数为页面的每一个按钮设置了 onclick 事件程序
function initAll() {
  document.getElementById("Lincoln").onclick = saySomething;
  document.getElementById("Kennedy").onclick = saySomething;
  document.getElementById("Nixon").onclick = saySomething;
}

function saySomething(){
  switch(this.id){
  case ‘Lincoln‘:
    alert(‘Four score and seven years ago...‘);
    break;
  case ‘Kennedy‘:
    alert(‘Ask not what your country can do for you...‘);
    break;
  case ‘Nixon‘:
    alert(‘I am not a crook!‘);
    break;
  default: 

  }
}

multicondition.html 之后页面如下:

调用三个按钮后分别弹出下面 3 个对话框。


处理错误

向用户提供有意义的错误消息,而不是大多数浏览器在拒绝用户的操作时返回莫名其妙的消息。

下面的脚本演示如何使用 JavaScript 的 try/throw/catch 命令产生友好、有用的错误信息,我们将这个功能用于一个简单的平方根计数器中。

errsqrt.html,调用 errsqrt.js 的 initAll() 函数,弹出对话框输入一个数字进行计算。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>演示使用 JavaScript 的 try/throw/catch 产生友好的错误消息</title>
<script src="errsqrt.js"></script>
</head>
<body>
<h3>演示使用 JavaScript 的 try/throw/catch 产生友好的错误消息</h3>
<h4>简单的平方根处理程序</h4>
</body>
</html>

errsqrt.js,适当的处理输入的数字的有效性,无效则弹出错误信息告诉用户。

// JavaScript Document
window.onload = initAll;

function initAll(){
  var ans = prompt(‘请输入一个数字‘, ‘‘);
  try{

  //isNaN 检查是否不是数字
  if(!ans || isNaN(ans) || ans < 0){
    throw new Error(‘Not a valid number‘);
    //抛出错误,指出不是一个有效的数字
    //JavaScript 会跳出 try 块代码,寻找 catch 语句。
    //try 块中其余的代码都被跳过
  }
  alert(‘The square root of ‘ + ans + ‘ is ‘ + Math.sqrt(ans));
  }catch(errMsg){
    //如果没有错误抛出,此段代码不会执行
    alert(errMsg.message);
  }
}

示例代码下载

JSBegin.rar

时间: 2024-08-07 07:01:56

了解 JavaScript (3)- 马上开始的相关文章

【JavsScript】JavaScript MVC 框架技术选型

你很喜欢Gmail和Trello之类的单页面应用,但是不太确定该从何开始.也许你的JavaScript代码是如此的杂乱无章,以致于你很想在下一个项目上尝试下JavaScript MVC库和框架,却苦于没有头绪?我正在撰写一本单页面应用的书,所以我阅读了大量网上的相关资料.在这里我尝试提供一些看法,希望可以帮助你下决定. 简介 这里讨论的是时下最热的框架,AngularJS.Backbone.Ember和Knockout.同时提到了Batman.CANjs.Meteor和Spine,但是没有详细展

【javaScript基础】马上调用函数表达式

在javaScript中,每一个函数被调用时,都会创建一个新的运行上下文.由于在一个函数里面定义的变量和函数仅仅能在里面訪问.在外面是不行的.上下文提供了一种非常easy的方法来创建私有性. //makeCounter函数返回另外一个匿名函数,这个匿名函数可以訪问到"私有"变量i, 好像有一点"特权"性. function makeCounter() { // i仅仅能在makeCounter的里面被訪问到 var i = 0; return function()

使用JavaScript为一张图片设置备选路径

在做网页开发的时候,有时候希望给图片设置一个备选路径,即,当src属性对应的主路径加载失败的时候,图片可以马上切换到备选路径.这样,即使主路径失效了,显示备用路径也不会影响网页的正常体验. 注意到网页中一张图片加载失败会触发error事件,因此可以使用DOM模型中的load和error事件实现这一效果. src1='main/image.jpg' //主路径 src2='another/image.jpg' //备用路径 jQuery 1.8以前 使用load和error方法捕捉事件 $('#i

Javascript引擎单线程机制及setTimeout执行原理说明

setTimeout用法在实际项目中还是会时常遇到.比如浏览器会聪明的等到一个函数堆栈结束后才改变DOM,如果再这个函数堆栈中把页面背景先从白色设为红色,再设回白色,那么浏览器会认为DOM没有发生任何改变而忽略这两句话,因此我们可以通过setTimeout把“设回白色”函数加入下一个堆栈,那么就可以确保背景颜色发生过改变了(虽然速度很快可能无法被察觉). 总之,setTimeout增加了Javascript函数调用的灵活性,为函数执行顺序的调度提供极大便利. 然后,我们从基础的层面来看看:理解J

前端知识杂烩(Javascript篇)

1. JavaScript是一门什么样的语言,它有什么特点?2.JavaScript的数据类型都有什么?3.请描述一下 cookies,sessionStorage 和 localStorage 的区别?4.webSocket如何兼容低浏览器?(阿里)5.this和它声明环境无关,而完全取决于他的执行环境6.JavaScript异步编程常用的四种方法7.在严格模式('use strict')下进行 JavaScript 开发有神马好处?8.神马是 NaN,它的类型是神马?怎么测试一个值是否等于

JavaScript函数,作用域以及闭包

JavaScript函数,作用域以及闭包 1. 函数 (1). 函数定义:函数使用function关键字定义,它可以用在函数定义表达式或者函数声明定义. a. 函数的两种定义方式: * function functionName() {} * var functionName = function(){} b. 两种函数定义不同之处 1). 声明提前问题 函数声明语句   :声明与函数体一起提前 函数定义表达式 :声明提前,但是函数体不会提前 请看下面图示:绿色线上面实在js初始加载的时候,查看

javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行

jsp页面表格布局Html代码 <body > <center> <input type="text" value="111" id="mytext"> <table border="1" width="60%" id="mytable"> <tr> <td id="td1">第一行第一列<

探索Javascript 异步编程

在我们日常编码中,需要异步的场景很多,比如读取文件内容.获取远程数据.发送数据到服务端等.因为浏览器环境里Javascript是单线程的,所以异步编程在前端领域尤为重要. 异步的概念 所谓异步,是指当一个过程调用发出后,调用者不能立刻得到结果.实际处理这个调用的过程在完成后,通过状态.通知或者回调来通知调用者. 比如我们写这篇文字时点击发布按钮,我们并不能马上得到文章发布成功或者失败.等待服务器处理,这段时间我们可以做其他的事情,当服务器处理完成后,通知我们是否发布成功. 所谓同步,是指当一个过

javascript的正则表达式学习

关于反向引用 复制代码 代码如下: // 测试函数 function matchReg(reg, str) { var result = str.match(reg); if(result) { console.dir(result); } else { console.log('match failed'); } } var reg = /([A-Za-z]{0,6})\1/; var str = 'AndrewAndrew'; // 测试通过 matchReg(reg, str); //通过