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中的打印语句: 数据类型 变量 ...
随机推荐
- Hive安装与部署
进去root权限(su) 1.从https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.ta ...
- Reactive 漫谈
目录 概念 面向流设计 异步化 响应式宣言 参考文档 概念 Reactive Programming(响应式编程)已经不是一个新东西了. 关于 Reactive 其实是一个泛化的概念,由于很抽象,一些 ...
- AutoResetEvent控制线程用法
本文主要来自一道面试题,由于之前对AutoResetEvent的用户很模糊(即使已经使用过了).面试题题目很简洁:两个线程交替打印0~100的奇偶数.你可以先动手试试,我主要是尝试在一个方法里面完成这 ...
- 写论文的第五天 hive安装
Hive的安装和使用 我们的版本约定: JAVA_HOME=/usr/local /jdk1.8.0_191 HADOOP_HOME=/usr/local/hadoop HIVE_HOME=/usr/ ...
- appium+python自动化项目实战(一):引入nose和allure框架
本文将介绍一套比较完整的appium自动化框架,以python为编写脚本语言,是因为python有强大的库,同时易学易懂. 最终的测试框架代码,将在jenkins项目中一键构建,执行自动化测试用例,并 ...
- 良许Linux | Linux学习方法及学习资料汇总
很多人想学习Linux,却不知道怎么着手,甚至不知道Linux有哪些方向,非常迷茫.基于此,我特地写了篇文章介绍Linux方向性问题,没想到一不小心成了爆款: 到什么程度才叫精通 Linux? 看完 ...
- springBoot配置activeMq点对点模式消费信息以及独占模式消费如何设置
1.在pom文件中引入对应jar包 <!--activeMQ start--> <dependency> <groupId>org.springframework. ...
- cf 1102 B
题意:求字符串中任意相邻两位是否可以可以由前一个加上任意个x或y屏蔽十位与后一位相等,如果可以需要添加的最少数字是多少,x值为0-9,y值也为0-9,求出任意x,y对应情形下字符串需要添加的最少数字, ...
- jqGrid根据数据动态设置rowList
superme.rowList = [10,20,50,100]; superme.rowNum = 20; 全局属性 loadComplete : function (data) { if(data ...
- .NET CORE 怎么样从控制台中读取输入流
.NET CORE 怎么样从控制台中读取输入流 从Console.ReadList/Read 的源码中,可学习到.NET CORE 是怎么样来读取输入流. 也可以学习到是如何使用P/Invoke来调用 ...