JavaScript 基础入门
JavaScript 基础入门
JavaScript 的组成
JS 由三部分组成,它们分别是:ECMAScript、DOM、BOM.
ECMAScript
因为网景开发了JavaScript,一年后微软又模仿JavaScript开发了JScript,为了让JavaScript成为全球标准,几个公司联合ECMA(European Computer Manufacturers Association)组织定制了JavaScript语言的标准,被称为ECMAScript标准。
DOM
文档对象模型(Document Object Model)。DOM把整个页面映射成一个多层节点结构。HTML 页面组成都是某种类型的节点,这些及节点又包含着不同类型的数据。
BOM
浏览器对象模型(Browser Object Model)。可以访问浏览器窗口的 BOM,对浏览器窗口进行操作。
ECMAScript、DOM、BOM 之间的关系
ECMAScript 是用来操作平台或者运行平台上页面的工具,它构成了 JS 核心的语法基础。
DOM 是运行在平台上的页面,用来操作网页中的元素。
BOM 是运行平台,BOM 的规则(语法)是建立在 ECMAScript 的规则之上,用来操作浏览器上的对象。
JavaScript 和 ECMAScript 规范
JavaScript 的标准化组织是 ECMA ——这个欧洲信息与通信系统标准化协会提供基于 Javascript 的标准化方案(ECMA 原先是欧洲计算机制造商协会的首字母缩写)。这种标准化版本的 JavaScript 被称作 ECMAScript,在所有支持该标准的应用中以相同的方式工作。公司可以使用开放标准语言来开发他们自己的 JavaScript 实现版本。ECMAScript 标准在ECMA-262规范中进行文档化。
ECMA-262 标准也通过了 国际标准化组织(ISO)的 ISO-16262。你可以在这里找到该规范文件。 ECMAScript 规范并没有描述文档对象模型(DOM),该模型由 万维网联盟(W3C) 制定。DOM 定义了HTML文件对象被脚本操作的方法。
JavaScript 文献 和 ECMAScript 规范
ECMAScript 规范是实现 ECMAScript 的一组需求;如果你想在 ECMAScript 实现或引擎(如Firefox 中的 SpiderMonkey 或 Chrome 中的 V8)中实现符合标准的语言特性,那么它是非常有用的。
ECMAScript 文档不是用来帮助脚本程序员的;使用 JavaScript 文档获取关于编写脚本的信息。
ECMAScript 规范使用了 JavaScript 程序员可能不熟悉的术语和语法。尽管 ECMAScript 中对语言的描述可能有所不同,但语言本身保持不变。JavaScript 支持 ECMAScript 规范中列出的所有功能。
JavaScript 文档描述了适合 JavaScript 程序员的语言方面。
JavaScript 代码位置
内部 JavaScript
<script>
// 在此编写 JavaScript 代码
</script>
内部 JavaScript 通常写在 </body> 后面;或者<body></body>里面;再或者写在<head></head>中,比如:
<head>
window.onload = function () {
// 在此编写 JavaScript 代码
}
</head>
推荐将 JS 代码写在</body>后面或者<head>标签中。因为如果将 JS 代码写在<body>中,那么当浏览器加载时,会按照从上到下的顺序解析代码,加载完 JS 代码时,HTML 还没有载入,会破坏页面的渲染效果,JS 代码无法实现与 HTML 的交互行为。
外部 JavaScript
将外部的 JS 文件引入当前页面,类似于引入外部 CSS 文件,代码如下:
<script src="script.js"></script>
这种方式是最好的,优点如下:
1. 可维护性:遍及不同 HTML 页面的 JavaScript 会造成维护问题,但把所有 JS 文件都放在一个文件夹中维护起来就轻松多了。而且开发人员因为也能够在不触及 HTML 标记的情况下集中精力编写 JS 代码
2. 可缓存:浏览器能够根据具体的设置缓存链接的所有外部 JS 文件,也就是说,如果有2个页面都使用同一个文件,那么这个文件只需下载一次。因此,最终结果就是能够加快页面加载速度。
3. 适应未来:通过外部文件包含 JS 无需使用 XHTML 或 hack 注释。HTML 和 XHTML 包含外部文件的语法是相同的。
内联 JavaScript 处理器
示例:
<button onclick="createParagraph()">点我呀</button>
强烈不推荐这样编写 JS 代码,这将使 JavaScript 污染到 HTML,而且效率低下。
这三者中,一般在练习中使用内部 JavaScript,实际开发中使用 外部 JavaScript,几乎不使用 内联 JavaScript 处理器。
JavaScript 中的大小写
JS 是区分大小写的,并使用 Unicode 字符集。如:
var a = 10;
var A = 11; console.log(a);
console.log(A); /*
结果为
10
11
由此可见,a 和 A 并不是同一个变量
*/
JavaScript 中的注释
就像 HTML 和 CSS,JavaScript 代码中也可以添加注释,浏览器会忽略它们,注释只是为你的同事(还有你,如果半年后再看自己写的代码你会说,这是什么垃圾玩意。)提供关于代码如何工作的指引。注释非常有用,而且应该经常使用,尤其在大型应用中。注释分为两类:
在双斜杠后添加单行注释,比如:
// 啦啦啦,我是注释~~~
在 /* 和 */ 之间添加多行注释,比如:
/*
多行注释1
多行注释2
多行注释3
*/
JavaScript 代码执行顺序
当浏览器执行到一段 JS 代码时,通常会按照 从上到下,从左往右 的顺序执行代码。比如:
var a = 10;
var b = 11;
console.log(a);
console.log(b);
console.log(a + b);
/*
控制台显示的结果为:
10
11
21
*/
JavaScript 语句
JS 当中的语句表示 JS 向宿主环境发送的命令。
例如下面的语句是向控制台中输出计算 10 + 2 的结果。
console.log(10 + 2); // 在每一条语句的后面都带有一个分号,表示语句结束
当然 JS 允许我们将分号省掉,但是无论是从代码的维护成本还是其他因素考虑,都不建议将每条语句后面的分号省略掉。
需要注意的是,如果分号前面的语句为空,则没有意义。
JavaScript 的输出方式
两种输出方式
// 第一种
console.log(); // 第二种
document.write();
console.log(); 是将数据输出到浏览器的控制台中,一般用来调试 JS 代码
document.write(): 是将数据输出到网页的页面中,此方式可以直接解析标签。如:
document.write(<strong>内容</strong>);
我们通常将 console.log(); 这种输出代码的形式称之为 代码打印
并且,我们一般使用 console.log(); 来打印数据 而不是 document.write(); ,因为后者会影响页面布局,某些情况下,后者甚至会覆盖页面。
JavaScript 中的表达式
一般情况下,表达式需要得到一个结果
例如 11 + 3 就是一个表达式,我们在创建这个表达式的时候,就希望得到 11 + 3 的结果
console.log(11 + 3); // 将 11 + 3 的结果 打印到浏览器的控制台中
JavaScript 的弹窗
JS 中的弹窗有三种方式,它们分别是:
// 第一种,警告对话框,只有确认键
alert();
// 没有返回值,返回 undefined; 不同的浏览器,显示不同 // 第二种,模态对话框(确认框),有确认件和取消键
confirm();
// 返回 Boolean 类型:true、false 表示选择确定还是取消 // 第三种,对话框,对话框中包含一条文字信息,用来提示用户输入文字,有确认键和取消键以及输入框
prompt();
// 如果文本输入框中为空,则返回一个空字符串,如果用户点击"取消"按钮,则返回null
注意事项:
alert 对话框使用在无需用户确认的情况下,否则应该使用其他类型的对话框
confirm 对话框是弹出式,直到这个对话框被点击后, 后面的脚本才会运行. 请勿滥用此功能
prompt 和 alert 以及类似的对话框都是模态窗口,它们会阻止用户激活程序其他部分的界面,直到该对话框关闭。因此,你不应该过度使用该方法。
查找并解决 JavaScript 代码的错误
错误类型
一般来说,代码错误主要分为两种:
语法错误:代码中存在拼写错误,将导致程序完全或部分不能运行,通常你会收到一些出错信息。只要熟悉语言并了解出错信息的含义,你就能够顺利修复它们。
逻辑错误:有些代码语法虽正确,但执行结果和预期相悖,这里便存在着逻辑错误。这意味着程序虽能运行,但会给出错误的结果。由于一般你不会收到来自这些错误的提示,它们通常比语法错误更难修复。
解决 BUG 的方法
以下是几种常见的 bug 形式
有报错
当在控制台中看到报错信息时,我们要观看它报的什么错,一般来说,我们可以很直观的看到报错信息。如:
Cannot set property 'onclick' of null
// 不是onc1ick为nu11,是onclick不能加给nu1l xxx is not defined
// xxx 未定义
有报错但是代码没有问题
解决方法:反向查找
发生这种情况时,我们要观看报错信息,如果在报错信息中没有找到来源,我们要根据报错的变量,向上逐步查找来源,如果没有找到,那就继续向上查找。
没有报错,没有结果
解决方法:反向查找
解决方法:
解决 bug 的通用方式
使用 console.log("1");
将 console.log("1"); 逐行使用,哪行代码打印不出来,哪行就出现了问题(最好的方式是,将 "1" 换位当前测试行的变量名,同时,变量名不要手写,而是将当前变量名 copy 一下)
定位 bug 信息的工具(工具帮助找到定位 bug 的信息)
打断点:让浏览器逐行执行代码
1. 使用 JS 提供的关键字:debugger (debugger要配合控制台使用)
2. 使用浏览器提供的控制台 sources,在 sources 选项中找到要需要断点的文件,点击要进行断点的行号,之后一步步执行。
以下有几种常见的错误类型
SyntaxError: missing ; before statement (语法错误:语句缺少分号)
这个错误通常意味着你漏写了一行代码最后的分号,但是此类错误有时候会更加隐蔽。例如如果我们把 checkGuess() 函数中的这一行 :
let userGuess = Number(guessField.value);
// 改成
let userGuess === Number(guessField.value);
将抛出一个错误。因为系统认为你在做其他事情。请不要把赋值运算符(=
,为一个变量赋值)和严格等于运算符(===
,比较两个值是否相等,返回 true/false)弄混淆。
SyntaxError: missing) after argument list (语法错误:参数表末尾缺少括号)
顾名思义:此错误通常意味着 函数 or 方法 调用或的结束括号忘写了。
SyntaxError: missing: after property id (语法错误:属性 ID 后缺少冒号)
JS 对象的形式有错时通常会导致此类错误,如:
function checkGuess() {
//写成了
function checkGuess( {
浏览器会认为我们试图将函数的内容当作参数传回函数。写圆括号时要小心!
SyntaxError: missing} after function body (语法错误:函数末尾缺少花括号)
通常意味着函数或条件结构中丢失了一个花括号。如果我们将 checkGuess() 函数末尾的花括号删除,就会得到这个错误。
SyntaxError: expected expression, got'string' (语法错误:得到一个 'string' 而非表达式)
↑↑↑↑↑↑ 或者 ↓↓↓↓↓↓
SyntaxError: unterminated string literal (语法错误:字符串字面量未正常结束)
这个错误通常意味着字符串两端的引号漏写了一个。如果你漏写了字符串开始的引号,将得到第一条出错信息,这里的 'string' 将被替换为浏览器发现的意外字符。如果漏写了末尾的引号将得到第二条。
Notes: 错误出现时,转到错误所在的行观察是否能发现问题所在。记住,错误不一定在那一行,甚至可能是由某个不相关的问题造成的!
JavaScript 基础入门的更多相关文章
- JavaScript基础入门10
目录 JavaScript 基础入门10 正则表达式 为什么使用正则表达式? 正则表达式的应用场景 如何创建一个正则表达式 基础语法 具有特殊意义的转义字符 量词 字符类 贪婪模式 练习 邮箱验证 中 ...
- JavaScript基础入门09
目录 JavaScript 基础入门09 Event 自定义右键菜单 获取鼠标按键 获取鼠标坐标 获取键盘按键 页面中位置的获取 浏览器的默认行为 冒泡 什么是冒泡 小练习 JavaScript 基础 ...
- JavaScript基础入门08
目录 JavaScript 基础入门08 DOM 介绍 绑定事件 给一组元素绑定事件 节点 节点树 节点类型 选取文档内容 通过id选取元素 通过指定的标签名选取元素 用指定的css类来选取元素 通过 ...
- JavaScript基础入门07
目录 JavaScript 基础入门07 BOM window对象 Navigator对象 Screen 对象 Location对象 History 对象 JavaScript 基础入门07 BOM ...
- JavaScript基础入门06
目录 JavaScript 基础入门06 Math 对象 Math对象的静态属性 Math对象的静态方法 指定范围的随机数 返回随机字符 三角函数 Date对象 基础知识 日期对象具体API 构造函数 ...
- JavaScript基础入门05
目录 JavaScript 基础入门05 严格模式 严格模式的设计目的 如何开启使用严格模式 显式报错 字符串 字符串的创建 字符串实例方法之常用API JavaScript 基础入门05 严格模式 ...
- JavaScript基础入门04
目录 JavaScript 基础入门04 JavaScript 对象 介绍 关于键名 对象的引用 语句和表达式需要注意的地方 对象属性常见的操作 with语句 JSON 特点 语法规则 JSON合法示 ...
- javascript基础入门之js中的结构分支与循环语句
javascript基础入门之js中的结构分支与循环语句 程序的结构①顺序结构:自上而下:②选择(分支)结构:多条路径,根据不同的条件,只执行其中一个:③循环结构:重复某些代码④配合特定的语句实现选择 ...
- javascript基础入门之js中的数据类型与数据转换01
javascript基础入门之js中的数据结构与数据转换01 js的组成(ECMAScript.BOM.DOM) js中的打印语句: 数据类型 变量 ...
随机推荐
- MVP架构下解决 RxJava 自动解绑问题
背景 MVP 模式下使用 RxJava 处理网络访问的回调,当数据返回时 Presenter 调用绑定的 View 的方法. 定义 BasePresenter 如下: public class Bas ...
- GD32电压不足时烧写程序导致程序运行异常的解决方法
一直使用的GD32F450前段时间遇到这样一个问题,当使用J-Link供电给板子烧写程序之后,程序运行缓慢,就像运行在FLASH高速部分之外一样,但是如果使用外部供电烧写,就不会出现这个问题,而且一旦 ...
- azure k8s netcore 程序初次部署
以下都是我在2018年12月份做的实验,今天才发布出来. 念想 首先是了解一些关于K8s的一些基础概念,推荐查看一下这个链接,非常适合入门k8s.是因为K8S的环境搭建比较复杂(最主要是懒),其实也有 ...
- Source Maps简介
提高网站性能最简单的方式之一是合并压缩JavaScript和CSS文件.但是当你需要调试这些压缩文件中的代码时,那将会是一场噩梦.不过也不用担心,souce maps将会帮你解决这一问题. Sourc ...
- MTFlexbox自动化埋点探索
1. 背景 跨平台动态化技术是目前移动互联网领域的重点关注方向,它既能节约人力,又能实现业务快速上线的需求.经过十年的发展,美团App已经变成了一个承载众多业务的超级平台,众多的业务方对业务形态的快速 ...
- 《C# 7.0核心技术指南》到货
前几天有大佬推荐本书,并且折扣相当的划算,随入手一本.
- 基于随机游走的三维网格分割算法(Random Walks)
首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...
- 关于前端jsonp跨域和一个简单的node服务搭建
先讲下概念 同源策略:是一种约定,浏览器最核心最基本的安全功能,(同域名,同协议,同端口)为同源 跨域: 跨(跳):范围 域 (源):域名,协议,端口 域名:ip的一种昵称(为了更好记住ip地址)如: ...
- [目录] ASP.Net Core 搭建微服务网站
本项目采用ASP.Net Core微服务技术,搭建博客和Saas平台. 全文将围绕(1)设计模式 (2)敏捷开发 目的: 结构足够合理,代码足够优美,扩展性.可读性.易维护性做到最优. 以下目录仅为 ...
- 舍得 (学习html几天)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...