一、前言:

  • 前段时间看红宝书(JavaScript高级程序设计),但没有计划的去看,也没有做详细的笔记,读了之后有点空虚,感觉不对劲啊,学的东西很难记住,印象不深啊,有种挫败感。
  • 作前端的js都学不好怎么做前端。后端都学js了,你说死不死。
  • 因此吾阅之,再阅之,并决心记之以博客,以增强印象,作得读书笔记,以便日后翻看及供大家参阅与讨论。

温馨提示:本系列笔记言辞会有主观色彩,知识重点记录。

二、JavaScript历史

  • 起源:话说在上世纪末1995年,Netscape公司推出Navigator浏览器。人家公司有追求,不单单能实现静态HTML,人家还想要有动态效果,还想着能去处理表单的验证,不要老是等到后台那边才知道表单输入合不合法,特别在那个年代,一次一等就上分钟,现在我们等上个十秒都想关掉它是不是,嘴边还吐槽着什么破网站。

  • 动手:有目标就去做,Netscape公司大牛多,Brendan Eich 用10天(网上说10天)就把JavaScript搞了出来,刚出来时叫LiveScript,为了蹭蹭当红明星Java热度,就改成JavaScript了,所以事实上他们两没啥关系。

  • 竞争:看到Netscape公司有了js,微软感觉不行啊,我的IE要被干掉啊,同时也感到js的前途无量,于是弄了个名为JScript的JavaScript的实现。

  • 标准: Netscape和微软竞争出现的js导致版本的不一致,随着业界的担心,JavaScript的标准化被提上议事日程。ECMA组织就去干这事,最后在弄出97年了ECMAScript作为标准。这里ECMAscript和JavaScript可以看做表达同一个东西

三、ECMAScript

ECMAScript(以下简称ES)由ECMA-262制定,ES的主要是语言的语法基础,是一种标准的存在。如果硬要区分ES和JS,ES是语言基础标准,而JS就是在这标准的基础上所实现的语言。

关于ES版本:ES从1997年制定好到现在已经经历很多版本,前面的版本都是一些小的修改。重要版本:

  • ES3,第三个版本,是对标准的第一次真正意义上修改
  • 2009年的ES5是当前各大流行浏览器所支持的
  • 2015年出版的ES6也流行起来。
  • 2015年后的每年也出版本,但浏览器还没能够支持。

四、JavaScript实现

javascript由三部分组成:

1.ECMAScript :核心部分,是js的语法基础,后面会继续写其语法。

2.DOM(文本对象模型) :用于操作HTML文档的应用编程接口。关于DOM:

  • DOM的出现使得动态HTML(DHTML)得以实现,可以不用重新加载页面而改变网页的外观和内容。
  • DOM带来的问题:主要是兼容性方面,Netscape和微软各抒己见,使得浏览器不兼容的局面产生。未解决此问题W3C着手规划DOM
  • DOM级别:DOM1,DOM2,DOM3 ,这里的级别相当于DOM的版本一样,代表着DOM在不断的完善,现在最新是DOM3

3.BOM(浏览器模型) :使用BOM可以控制浏览器显示的页面以外的部分

五、JavaScript使用:

(1)标签属性:在网页中使用js关键的是使用<script>标签,其有6个属性:

  1. async:可选,表示立即下载脚本,但不妨碍页面中的其他操作。也就是异步脚本,只适用于外部脚本文件。
  2. defer:可选,表示脚本可以延迟到文档完全被解析和显示后在执行。也就是延迟脚本,只适合与外部脚本文件。
  3. src:可选,表示包含要执行代码的外部文件。
  4. type:默认text/Javascript。默认执行js,可以不用指定。
  5. charset:可选,表示通过src属性指定代码的字符集,大多数浏览器会忽略它的值,很少人使用。
  6. language:已废弃

    常用就前4个

(2)使用:使用 <script > :有两种操作:

1. 直接在标签内写入代码,即在html中内嵌代码,这种方式不推荐。如:
<script>
function helloWorld(){
alert("hello world!");
}
helloWorld();
</script>
2. 另一种通过src属性引入外部的文件。
<script src="js/hello.js"></script>

尽可能使用外部引用js文件,优点:

  • 可维护性:内嵌代码在html中,维护困难且可读性差,在js单独的文件中维护将轻松的多。

  • 可缓存:浏览器可以根据具体的设置缓存链接的所用外部js文件

  • 适应未来:通过外部文件来包含js无须对XHML的特别处理和注释hack。HTML和XHTML的包含文件的语法相同。

特别注意:<script>在使用了src属性后,不要在内嵌代码,此时的内嵌的代码不会被执行。只会执行src对应文件的代码。

(3)位置:关于<script> 在HTML文档中的位置:

在HTML4中规定<script> 标签可以放在 <head><body> 标签内。

由于浏览器解析HTML文档是由上到下,且在遇到<script> 标签后会先解析和执行js代码,并中断HTML的加载,所以放在<head> 标签中是会使得HTML文档可视内容中断加载。

画重点:所以<script> 标签的位置首考虑放在<body> 标签底部。例如:

<html>
<head>
<title>hello js</title>
</head>
<body>
<p>hello js!</p>
<!-- js文件放在body底部 -->
<script src="example.js"></script>
</body>
</html>

六、JavaScript的平稳退化方案

什么是平稳退化:就是有些浏览器不支持js,当然现在几乎没有浏览器这么菜啦,还有就是js功能被禁用。这时就需要没有js的情况下你的网页怎么友好一点交互,不会搞得太难看,太尴尬。

使用<noscript> 标签,应用场景:

  • 浏览器不支持JavaScript
  • 浏览器支持脚本,但脚本被禁止了

例子:当浏览器不支持js或禁用js时就会显示出noscript标签中的内容,若浏览器能执行js则noscript就被隐藏。

<html>
<head>
<script src="example.js"></script>
</head>
<body>
<noscript>
<p>本页面需要浏览器支持JavaScript</p>
</noscript>
</body>
</html>

七、后记

这是看红宝书的第一篇笔记,涵盖了一二章的内容,都是知识点。本系列博客将会继续更新,一同和大家分享分享。如果觉得写得好就给个赞吧。谢谢大家。

分享一句话:时间不会停下来等你,我们现在过的每一天,都是余生中最年轻的一天。

本文出自博客园:http://www.cnblogs.com/Ry-yuan/

作者:Ry(渊源远愿)

欢迎访问我的个人首页:我的首页

欢迎访问我的github:https://github.com/Ry-yuan/demoFiles

欢迎转载,转载请标明出处,保留该字段。

JS--我发现,原来你是这样的JS(一)(初识,历史)的更多相关文章

  1. 爬虫模拟有道字典进行翻译,还发现了一条好玩的js

    08.14自我总结 爬虫模拟有道字典进行翻译 一.代码 import requests from lxml.html import etree # headers= { # 'User-Agent': ...

  2. gulp实现打包js/css/img/html文件,并对js/css/img文件加上版本号

    参考打包教程: http://www.cnblogs.com/tugenhua0707/p/4069769.html http://www.cnblogs.com/tugenhua0707/p/498 ...

  3. 深入浅出Node.js(一):什么是Node.js

    Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到 ...

  4. 深入浅出Node.js(一):什么是Node.js(转贴)

    以下内容转自:http://www.infoq.com/cn/articles/what-is-nodejs/ 作者:崔康 [编者按]:Node.js从2009年诞生至今,已经发展了两年有余,其成长的 ...

  5. JS模块化:CommonJS和AMD(Require.js)

    早期的JS中,是没有模块化的概念的,这一情况直到09年的Node.js横空出世时有了好转,Node.js将JS作为服务端的编程语言,使得JS不得不寻求模块化的解决方案. 模块化概念 在JS中的模块是针 ...

  6. JS学习十四天----server端运行JS代码

    server端运行JS代码 话说,当今不在client使用JS代码才是稀罕事.因为web应用的体验越来越丰富,client用JS实现的逻辑也越来越多,这造成的结果就是某些差点儿一致的逻辑须要在clie ...

  7. js浮点数精度丢失问题及如何解决js中浮点数计算不精准

    js中进行数字计算时候,会出现精度误差的问题.先来看一个实例: console.log(0.1+0.2===0.3);//false console.log(0.1+0.1===0.2);//true ...

  8. JS表单验证-12个常用的JS表单验证

    JS表单验证-12个常用的JS表单验证 最近有个项目用到了表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1. 长度限制 <p>1. 长度 ...

  9. angularjs ocLazyLoad分步加载js文件,angularjs ocLazyLoad按需加载js

    用angular有一段时间了,平日里只顾着写代码,没有注意到性能优化的问题,而今有时间,于是捋了捋,讲学习过程记录于此: 问题描述:由于采用angular做了网页的单页面应用,需要一次性在主布局中将所 ...

  10. 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析

    作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...

随机推荐

  1. Cesium Vue开发环境搭建

    最近被问到如何在 vuejs 中集成 cesium,首先想到的官网应该有教程.官网有专门讲 Cesium and Webpack(有坑),按照官网的说明,动手建了一个Demo,在这记录下踩坑过程. 一 ...

  2. redis安装(linux)

    redis安装 1. 安装tcl # cd /usr/local # wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz # t ...

  3. MySQL高可用架构-MMM安装教程

    安装指南: 一.架构以及服务器信息 基本安装包含至少2个数据库服务器和1个监视服务器.本例中使用2个监视服务器和5个数据库服务器(服务器系统为CentOS 7) 用途 IP 主机名 Server-id ...

  4. How To Scan QRCode For UWP (4)

    QR Code的全称是Quick Response Code,中文翻译为快速响应矩阵图码,有关它的简介可以查看维基百科. 我准备使用ZXing.Net来实现扫描二维码的功能,ZXing.Net在Cod ...

  5. Installation failed with message...It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing.

    错误弹窗如图: Installation failed with message Failed to finalize session: INSTALL_FAILED_TEST_ONLY:instal ...

  6. PHP多进程系列笔记(五)

    前面几节都是讲解pcntl扩展实现的多进程程序.本节给大家介绍swoole扩展的swoole_process模块. swoole多进程 swoole_process 是swoole提供的进程管理模块, ...

  7. Vue + Element UI 实现权限管理系统 前端篇(八):管理应用状态

    使用 Vuex 管理应用状态 1. 引入背景 像先前我们是有导航菜单栏收缩和展开功能的,但是因为组件封装的原因,隐藏按钮在头部组件,而导航菜单在导航菜单组件,这样就涉及到了组件收缩状态的共享问题.收缩 ...

  8. C++ string中的几个小陷阱,你掉进过吗?

    C++开发的项目难免会用到STL的string,使用管理都比char数组(指针)方便的多,但在得心应手的使用过程中也要警惕几个小陷阱,避免我们项目出bug却迟迟找不到原因. 1.  结构体中的stri ...

  9. 超详细的Java时间工具类

    package com.td.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.Pa ...

  10. python 使用 matplotlib.pyplot来画柱状图和饼图

    导入包 import matplotlib.pyplot as plt 柱状图 最简柱状图 # 显示高度 def autolabel(rects): for rect in rects: height ...