diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 0000000..2df07c2 --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,74 @@ +# Summary + +* [0. 前言](README.md) + +## JS初识 + +* [1. 前端开发初识](docs/hello.md) +* [1. 数据类型初识](docs/hello.md) +* [1. 函数初识](docs/hello.md) +* [1. 变量的声明和原理](docs/hello.md) + +## ECMAScript + +### 语法基础 + + 文档说明 + 变量声明 + 数据类型初始 + 控制流程语句 + 函数和类 + 循环与迭代 + 其它语句 + 基础表达式 + 左侧表达式 + 递增和递减 + 一元运算符 + 算术运算符 + 关系运算符 + 相等与相同 + 按位操作符 + 逻辑运算符 + 三元条件运算符 + 赋值运算符 + 逗号运算符 + 非标准功能 + 全局属性 + 全局函数 + +### 类的详解 + + - Array + - AsyncFunction + - Atomics + - BigInt + - Boolean + - SharedArrayBuffer + - TypedArray + - ArrayBuffer + - DataView + - Date + - Error + - Function + - Generator + - GeneratorFunction + - Intl + - JSON + - Map + - Math + - Number + - Object + - Promise + - Proxy + - Reflect + - RegExp + - Set + - String + - Symbol + - WeakMap + - WeakSet + - WebAssembly + +## DOM + +## BOM \ No newline at end of file diff --git a/docs/hello.md b/docs/hello.md new file mode 100644 index 0000000..c1b5b57 --- /dev/null +++ b/docs/hello.md @@ -0,0 +1,729 @@ +# 前端开发初识 + +## 本章目录 + +1. 编辑器的选择 +1. 前端开发环境介绍 +1. script 标签的属性 +1. JS由哪些部分组成、DOM初识 +1. HTML中怎么使用JS/CSS +1. 从noscript标签引深出的两种编程思想(优雅降低,渐进增强) +1. javascript的文档模式和ES6 +1. 变量的定义和储存值的类型判断 +1. 强类型语言和弱类型语言的区别 +1. 编程语言是做什么的?面向对象编程的真正意义是什么? +1. 练习题 +1. 前端技术方向的选择,编程语言是做什么的? +1. JS代码检测的一些小方法 + +## 编辑器的选择 + +通过专业的工具来写代码可以事半功倍,我们不可能在工作中使用记事本,备忘录之类的软件来写代码。前端开发者写代码的主流选择是 `VSCode` 和 `WebStrom`。 + +`vscode` 启动快,短小精悍型,配合插件,可实现强大功能,一个强大又免费的工具。 + +`WebStrom` 内置支持了很多功能,前端开发的神器,因为每次启动都需要建立索引,启动时间比较长,占用内存大。一个收费但是又很值得的工具。 + +对于初次接触前端的朋友们,推荐使用 `VSCode` 或 `WebStrom`,因为用户基础大,而且前端生态中新的工具和炫酷解决方案总是优先支持这两款工具。如果你有选择困难症,那么就使用 `VSCode` 吧,把精力放在研究代码上,不要在编辑器上浪费过多时间; + +## 前端开发环境介绍 + +相比其他语言,学习 JavaScript 的优势之一在于不用安装或配置复杂的环境就可以开始学习。 + +我们的电脑上只要有浏览器和编辑器就可以进入 JavaScript 的学习和实践了。 + +- 编辑器推荐使用 `VSCode` +- 浏览器用 `Chrome` + +因为 JavaScript 代码是执行的时候才进行编译,所以环境比较简单;当然,请不要纠结 JavaScript 和 Java 之间有什么关系,他们除了名字都带Java这个字符,其它没有啥关系,如果你喜欢网页程序,想快速做一名前端发者,那么跟着敲代码就好了,不要浪费时间。 + +**推荐的选择**: 下面选项是对于开发者来说很重要。 + +- 经常总结和思考学习的内容 + - 如果是博客记录:独立域名和第三方的均可,比如博客园,掘金,简书等 + - 如果是笔记记录: 只要能够长期保存的工具都可以,比如网易云笔记,印象笔记等。 + - 学习的时候多总结多思考是一个非常好的习惯,学的多不如学会的多,看的多不如掌握的多。记录是留下总结和思考的痕迹,方便以后随时回顾。 +- Github + - 一个开发者作品的聚集地,可以通过借鉴其它开发者的代码来提高自己的编码实力。 + +## script 标签的属性 + +在日常工作的网页中,JavaScript是基于HTLML来运行的,为了项目的维护,很多时候选择使用 script 标签来引用JavaScript代码,我们先熟悉下 script 标签; + +script标签有下面属性 + +- `async` + - 这是个布尔属性,正常的JavaScript加载是同步的,该属性设置为`true`可以异步加载JavaScript资源,可以消除解析阻塞,在性能优化类的面试题中,异步获取是一个考点。 + - 对于普通脚本,如果存在 async 属性,那么普通脚本会被并行请求,并尽快解析和执行。 + - 对于模块脚本,如果存在 async 属性,那么脚本及其所有依赖都会在延缓队列中执行,因此它们会被并行请求,并尽快解析和执行。 +- `defer` + - 这是个布尔属性,设置为`true`的时候,用来通知浏览器当前JS文件将在文档完成解析后,触发 DOMContentLoaded 事件前执行。 + - defer 的作用类似上面的async,有 defer 属性的脚本会阻止 DOMContentLoaded 事件,直到脚本被加载并且解析完成。 + - defer 属性只对普通脚本起效果,对模块脚本没有作用,模块脚本默认就有这种效果。 +- `crossorigin` + - 允许用户配置元素获取数据的 CORS 请求。 +- `integrity` + - integrity 属性是资源完整性规范的一部分,它允许你为 script 提供一个 hash,用来做校验,检验加载的 JavaScript 文件是否完整。 + - integrity 内的Hash值是告诉浏览器,使用指定的签名算法对需要加载的js文件进行计算,计算后的值与intergrity提供的摘要签名对比,如果二者不一致,就不会执行这个资源。 +- `nomodule` + - 这是一个布尔属性,设置为true的时候,可以设置标明当前脚本在支持 ES2015 modules 的浏览器中不执行。 + — 因为nomodule的这种特效,我们可以把它用在不支持模块化JavaScript的旧浏览器中,用来提供优雅降级的解决方案。 +- `nonce` + - nonce属性可以用来告诉浏览器,当前的脚本内容不是由恶意注入到当前文档中的,而是故意放入文档中的。 +- `referrerpolicy` + - 设置在加载当前JS文件的时候发送哪个来源。 +- `src` + - 这是最常用的属性,指定引用外部脚本的URI。这个属性用来代替直接在文档中写JS代码,让维护更简单。 + - 注意: 指定了 src 属性的 script 标签内不应该再写JS代码了(就算你写了也不会执行的)。 +- `type` + - 为文件指定MIME类型,支持的MIME类型包括 text/javascript, text/ecmascript, application/javascript, 和 application/ecmascript。 + - 如果没有定义这个属性,脚本会被视作JavaScript,type是属于可忽略的属性,推荐不写 +- `text` + - 用于设置元素的文本内容。 + - 注意: 该属性在节点插入到DOM之后,此属性会被解析为可执行代码。 +- `charset` + - 如果存在,该值必须和"utf-8"匹配(不区分大小写)。 + - charset 没有必要写,因为页面文档使用`UTF-8`,则 script 标签会从页面文档中继承这个属性。(如果文档开发不写`UTF-8`,中文的html文件运行会显示乱码。) +- `language` + - 和type属性类似,这个属性定义脚本使用的语言。这是一个非标准化的属性。没有必要写。 + +一般最常用的就是src,常见的script标签写法如下: + +```js + +``` + +## 网站由哪些部分组成 + +**一个网站由HTML/CSS/JS三者来组成;** + +- HTML 可以看做人的骨架和肉体(HTML是标记使用) +- CSS 可以看做人的衣服,美瞳、化妆品(使人看起来更加的漂亮,看起来更加赏心悦目) +- JS 可以看做人的技能,比如会眨眼,会吃饭,会跑步,会化妆等等 + - 比如把一块手表戴在自己的手上,使自己看起来更有气质,这可以看做是通过JS来控制CSS + - 比如感觉自己身体胖了,去减肥;这就相当于通过JS来控制HTML; + - 这一切都是自己倒腾自己的,如果张三去操作李四,就牵扯到JS中"跨域",权限等问题了,现在仅作了解;只需要知道,在浏览器中,JS操作的是当前这张网页的; + + + +## JS由哪些部分组成 + +一个完整的javascript实现应该有下列三个不同部分组成: + + + +- `ECMAScript`:提供核心语言功能,是核心,规定了这们语言的书写规范; + + ```js + var jd="京东商城"; + ``` + +- `DOM`:提供访问和操作网页内容的方法和接口,(document object model 简称DOM 文档对象模型) + + ```js + var oDiv=document.getElementById("div1"); + oDiv.innerText="现在已经被我占领了"; + ``` + +- `BOM`:提供与浏览器交互的方法和接口; + - BOM最蛋疼的部分是没有统一的标准;从根本上讲BOM只处理浏览器窗口和框架,(browser object model 简称 BOM 浏览器对象模型) + + ```js + windows.location.href + ``` + +### 1、核心部分: + +WEB浏览器只是ECMA的宿主环境之一,也可以不依赖浏览器,比如宿主环境可能还包括Node和Adobe Flash; +ECMAScript规定了Javascript这门语言的组成部分;主要规定了语法、类型、语句、关键字、保留字、操作符、对象; + +### 2、DOM部分 + +文档对象 模型把整浏览器页面映射为一个多层节点结构,页面中每个组成部分都是某种类型的节点,这些节点又包含了不同类型的数据; +``` + + +
+ +之前,放在页面偏后的地方,当然如果你有强迫症,就要放前面,那需要特殊处理一下,如下; + +如果放在head中,直接获取元素的时候,是获取不到的(因为此时还没有加载完成);比如获取ID,就是获取不到的;需要做延迟加载才好 + + window.onload=function () { + var oDiv=document.getElementById("div1"); + oDiv.innerText="22"; + } + +这样在DOM加载完成后才会触发onload里面的代码 + + + +
+ +
+ +
+ + + + < script src="./jquery.js"> + < /html> + +所有的javascript会按照它在页面中的顺序来依次解析;一般写在页面内容的后面,推荐放在前,因为放在body前可以通过W3C的校验,如果不为W3C校验,放在