Web/04-JavaScript基础/02-JavaScript书写方式:hello world.md
2021-11-15 21:38:43 +08:00

371 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 开始写第一行 JavaScript 代码hello world
JS 代码的书写位置在哪里呢这个问题也可以理解成引入 JS 代码有哪几种方式有三种方式 CSS 的引入方式类似
1. **行内式**写在标签内部
2. **内嵌式**内联式写在 head 标签中
3. **外链式**引入外部 JS 文件
### 方式 1行内式
**代码举例**
```javascript
<input type="button" value="点我点我" onclick="alert('千古壹号 Hello 方式1')" />
```
完整的可执行代码如下
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<input type="button" value="点我点我" onclick="alert('千古壹号 Hello 方式1')" />
</body>
</html>
```
**分析**
- 可以将单行或少量 JS 代码写在 HTML 标签的事件属性中 on 开头的属性比如放在上面的 `onclick`点击事件中
- 这种书写方式不推荐使用原因是可读性差尤其是需要编写大量 JS 代码时很难维护引号多层嵌套时也容易出错
- 关于代码中的引号 HTML 标签中我们推荐使用双引号JS 中我们推荐使用单引号
### 方式 2内嵌式内联式
我们可以在 HTML 页面的 `<body>` 标签里放入`<script type=”text/javascript”></script>`标签对并在`<script>`里书写 JavaScript 代码
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<script type="text/javascript">
// 在这里写 js 代码
alert('千古壹号 hello 方式2');
console.log('qianguyihao hello 方式2');
</script>
</body>
</html>
```
**分析**
- text 表示纯文本因为 JavaScript 代码本身就是纯文本
- 可以将多行 JS 代码写到 `<script>` 标签中
- 内嵌式 JS 是学习时常用的方式
### 方式 3外链式
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<!-- 外链式:引入外部的 js 文件:这个 utils.js 文件与当前的 html 文件,处于同一级目录 -->
<script src="utils.js"></script>
</body>
</html>
```
**分析**
- 上面这段代码依然是放到 body 标签里可以和内嵌的 JS 代码并列
- 上方代码的 script 标签已经引入了外部 JS 文件所以这个标签里面不可以再写 JS 代码
**总结**
我们在实战开发中基本都是采用方式 3因为将 html 文件和 js 文件分开的方式有利于代码的结构化和复用符合高内聚低耦合的思想很少会有人把一大堆 JS 代码塞到 html 文件里
### 关于 window.onload先加载最后执行
上面的三种方式有个共同的地方是JS 代码都是写在`</body>`中的准确来说是在页面标签元素的后面 body**结束标签**的前面
为什么一般是按这样的顺序来写呢这是因为浏览器默认会**从上至下**解析网页这句话很重要当你**需要通过 JS 来操作界面上的标签元素**的时候假如将 JS 代码`<script>`标签写到`<head>`标签中或者写在页面标签元素的前面那么这样的 JS 是无效的因为标签元素在此时都还没来得及加载自然无法操作这个元素
**重点来了**
当你**需要通过 JS 来操作界面上的标签元素**的时候如果实在想把 JS 写到`<head>`标签中那么就必须用 window.onload JS 代码进行包裹代码格式如下
```html
<head>
window.onload = function(){
// 这里可以写操作界面元素的JS代码等页面加载完毕后再执行
...
}
</head>
```
**window.onload**的含义是等界面上所有内容都加载完毕后不仅要等文本加载完毕而且要等图片也要加载完毕再执行`{}`中的代码做到了**先加载最后执行**也就是**等页面加载完毕后再执行**
当然我们可以根据具体需求 window.onload 写在 `<head>`标签中或者写在`<script>`标签中
## JavaScript 一些简单的语法规则
学习程序是有规律可循的程序会有有相同的部分这些部分就是一种规定不能更改我们称之为语法我们先来了解一个简单的语法规则
1JS 对换行缩进空格不敏感每一条语句以分号结尾
也就是说
代码一
```html
<script type="text/javascript">
alert('今天蓝天白云');
alert('我很高兴');
</script>
```
等价于代码二
```html
<script type="text/javascript">
alert('今天蓝天白云');alert('我很高兴');
</script>
```
2每一条语句末尾要加上**分号**虽然分号不是必须加的但如果不写分号浏览器会自动添加分号导致消耗一些系统资源和性能甚至有可能**添加错误**
3所有的符号都是英文的比如**括号**引号分号
如果你用的是搜狗拼音**建议不要用 shift 切换中英文**可以在搜狗软件里进行设置不然很容易输入中文的分号建议用 ctrl+space 切换中英文输入法
4JS 严格区分大小写
## 前端代码的注释
注释即解释注解注释有利于提高代码的可读性且有利于程序员之间的沟通
注释可以用来解释某一段代码的功能和作用通过注释还可以补充代码中未体现出来的部分
注释可以是任何文字可以写中文
**我们不要把 HTMLCSSJavaScript 三者的注释格式搞混淆了**
### HTML 的注释
格式
```html
<!-- 我是 HTML 注释 -->
```
举例
```html
<!--头部开始-->
<div class="header"></div>
<!--头部结束-->
<!--内容开始-->
<div class="main"></div>
<!--内容结束-->
<!--底部开始-->
<div class="footer"></div>
<!--底部结束-->
```
### CSS 的注释
举例
```html
<style type="text/css">
/* 我是 CSS 注释 */
p {
font-weight: bold;
font-style: italic;
color: red;
}
</style>
```
注意CSS 只有`/* */`这种注释没有`//`这种注释而且注释要写在`<style>`标签里面才算生效
### JavaScript 的注释
单行注释
```js
// 我是注释
```
多行注释
```js
/*
多行注释1
多行注释2
*/
```
补充VS Code 单行注释的快捷键是Ctrl + /Alt + Shift + A
当然如果你觉得多行注释的默认快捷键不方便我们还可以修改默认快捷键操作如下
VS Code --> 首选项 --> 键盘快捷方式 --> 查找注释这两个字 --> 将原来的快捷键修改为其他的快捷键比如Ctrl + Shift + /
### 对注释的认知
很多人认为代码注释是多余的他们的理由是如果注释太多说明代码写得不清晰而且代码更新的同时如果注释没更新那段注释就成了磁盘上的垃圾误导他人
还有人认为注释应该尽可能详细就像写小作文一样
上面这样的理由都不具有说服力我告诉你为什么要写注释
1. 所有注释都是必要的吗当然不是注释不应该用来解释某些代码正在做什么如果代码无法清楚到去解释自己时那么代码需要变得更简单有一些例外比如正则表达式和复杂算法通常会从解释他们正在做什么事情的注释中获益很多
2. 注释用于解释为什么某些代码存在时很有用大多数注释都是针对代码本身无法包含的信息例如决策背后的推理业务流程业务逻辑注意事项防踩坑指南参考链接
3. 注释即文档需要持续更新维护新陈代谢文档也会过期但不能因噎废食即便文档过期至少它记载了曾经的开发记录
推荐阅读
- 开发者代码审查 review 指南https://jimmysong.io/eng-practices/docs/review/
## JavaScript 输出语句
### 弹窗alert()语句
我们要学习的第一个语句就是 alert 语句
代码举例如下
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
alert('千古壹号');
</script>
</body>
</html>
```
**alert**英文翻译为警报的用途**弹出警告框**它会在弹窗中显示一条信息并等待用户按下 OK
`alert("")`弹窗的效果如下
![](http://img.smyhvae.com/20180116_1735.gif)
这个弹窗 IE 浏览器中长这样
![](http://img.smyhvae.com/20180116_1906.png)
上面的代码中如果写了两个 alert()语句则网页的效果是弹出第一个警告框点击确定后继续弹出第二个警告框
### 弹窗confirm()语句含确认/取消
代码举例如下
```
var result = confirm('你听说过千古壹号吗?');
console.log(result);
```
代码运行后页面上会显示一个弹窗弹窗上有确认取消两个按钮点击确定返回 `true`点击取消返回 `false`
效果如下
![20211031-1537](http://img.smyhvae.com/20211031-1537.gif)
### 弹出输入框prompt()语句
`prompt()`就是专门弹出能够让用户输入的对话框用得少测试的时候偶尔会用
JS 代码如下
```javascript
var a = prompt('请随便输入点什么东西吧');
console.log(a);
```
上方代码中用户输入的内容将被传递到变量 a 里面并在控制台打印出来
效果如下
![](http://img.smyhvae.com/20180116_2230.gif)
**alert() prompt()的区别**
- alert() 语句中可以输出数字和字符串如果要输出字符串则必须用引号括起来prompt()语句中用户不管输入什么内容都是字符串
- prompt() 会返回用户输入的内容我们可以用一个变量来接收用户输入的内容
### 网页内容区域输出document.write()语句
代码举例
```
document.write('千古前端图文教程');
```
页面效果
![20211031_1543](http://img.smyhvae.com/20211031_1543.png)
### 控制台输出console.log() 打印日志
`console.log()`表示在控制台中输出console 表示控制台log 表示输出括号里可以写字符串数字变量
控制台是程序员调试程序的地方比如使用 console 语句打印日志测试程序是否运行正常
Chrome 浏览器中 F12 即可打开控制台选择console即可看到打印的内容
`console.log("")`效果如下
![](http://img.smyhvae.com/20180116_2008.gif)
console 语句可以设置不同的打印等级
```js
console.log('千古壹号1'); //普通打印
console.warn('千古壹号2'); //警告打印
console.error('千古壹号3'); //错误打印
```
效果如下
![20211031_1552](https://img.smyhvae.com/20211031_1552.png)
上图中不同的打印等级区别不大只是颜色背景上的区别方便肉眼区分过滤信息
普通人是不会在意控制台的但是有些网站另藏玄机比如百度首页的控制台悄悄地放了一段招聘信息的彩蛋挺有意思
![](http://img.smyhvae.com/20180116_2010.png)
做前端开发时需要经常使用控制台做调试我们甚至可以直接在控制台输入 JS 语句然后打印执行结果
**总结**alert() 主要用来显示消息给用户console.log() 用来给程序员做调试用
## 我的公众号
想学习**更多技能**不妨关注我的微信公众号**千古壹号**
扫一扫你将发现另一个全新的世界而这将是一场美丽的意外
![](http://img.smyhvae.com/20200102.png)