JavaScript学习第一弹--JavaScript概述及快速入门
1.什么是JavaScript
1.1 概述
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES6。(以上解释来自百度百科)
1.2 历史
"1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。......网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。"网页脚本语言到底是什么语言?网景公司当时有两个选择:一个是采用现有的语言,比如Perl、Python、Tcl、Scheme等等,允许它们直接嵌入网页;另一个是发明一种全新的语言。这两个选择各有利弊。第一个选择,有利于充分利用现有代码和程序员资源,推广起来比较容易;第二个选择,有利于开发出完全适用的语言,实现起来比较容易。到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。就在这时,发生了另外一件大事:1995年Sun公司将Oak语言改名为Java,正式向市场推出。Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。总之,当时的形势就是,网景公司的整个管理层,都是Java语言的信徒,Sun公司完全介入网页脚本语言的决策。因此,Javascript后来就是网景和Sun两家公司一起携手推向市场的,这种语言被命名为"Java+script"并不是偶然的。
此时,34岁的系统程序员Brendan Eich登场了。1995年4月,网景公司录用了他。Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言作为网页脚本语言的可能性。Brendan Eich本人也是这样想的,以为进入新公司后,会主要与Scheme语言打交道。仅仅一个月之后,1995年5月,网景公司做出决策,未来的网页脚本语言必须"看上去与Java足够相似",但是比Java简单,使得非专业的网页作者也能很快上手。这个决策实际上将Perl、Python、Tcl、Scheme等非面向对象编程的语言都排除在外了。Brendan Eich被指定为这种"简化版Java语言"的设计师。但是,他对Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果Brendan Eich预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?总的来说,他的设计思路是这样的:
(1)借鉴C语言的基本语法;
(2)借鉴Java语言的数据类型和内存管理;
(3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
(4)借鉴Self语言,使用基于原型(prototype)的继承机制。
所以,Javascript语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。多年以后,Brendan Eich还是看不起Java。他说:"Java(对Javascript)的影响,主要是把数据分成基本类型(primitive)和对象类型(object)两种,比如字符串和字符串对象,以及引入了Y2K问题。这真是不幸啊。"把基本数据类型包装成对象,这样做是否可取,这里暂且不论。Y2K问题则是直接与Java有关。根据设想,Date.getYear()返回的应该是年份的最后两位:
var date1 = new Date(1999,0,1);
var year1 = date1.getYear();
alert(year1); // 99
但是实际上,对于2000年,它返回的是100!
var date2 = new Date(2000,0,1);
var year2 = date2.getYear();
alert(year2); // 100
如果用这个函数生成年份,某些网页可能出现"19100"这样的结果。这个问题完全来源于Java,因为Javascript的日期类直接采用了java.util.Date函数库。Brendan Eich显然很不满意这个结果,这导致后来不得不添加了一个返回四位数年份的Date.getFullYear()函数。如果不是公司的决策,Brendan Eich绝不可能把Java作为Javascript设计的原型。作为设计者,他一点也不喜欢自己的这个作品:
"与其说我爱Javascript,不如说我恨它。它是C语言和Self语言的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。'(the part that is good is not original, and the part that is original is not good.)"
以上转载自:https://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html
2.快速入门
2.1 JavaScript的引入
内部引入
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--内部引入:script标签内写javascript程序-->
<script>
alert("hello world");
</script>
</head>
<body>
<!--也可以将javascript代码放到body里-->
</body>
</html>
外部引入
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 外部引入 -->
<script src="js/first.js"></script>
</head>
<body>
<!--也可以将javascript代码放到body里-->
</body>
</html>
2.2 基本语法入门
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
// 1.javascript严格区分大小写
// 2.定义变量 变量类型(只有一个var) 变量名(区分大小写) = 值(赋什么类型的值变量就是什么类型)
var num = 1; //赋1给num,则num自动为整数类型
var string = "hello" //string为字符串
alert(num);
alert(string);
// 3.循环语句:与java的基本语法一样
var score = 70;
if(score >= 90 && score <= 100){
alert("90~100");
}
else if(score >= 80 && score < 90){
alert("80~90");
}
else{
alert("other");
}
</script>
</head>
<body>
</body>
</html>
在浏览器调试JS
在浏览器按下F12打开调试器
浏览器调试器使用必备须知:

使用调试器里的控制台打印出score的值

使用调试器里的source进行JS调试

2.3 数据类型
数值,文本,图形,音频,视频.....
变量
var i = 1;
var 王者 = "荣耀"
数值
JS不区分小数和整数
123 // 整数123
123.1 // 浮点数123.1
1.233e3 // 科学计数法(1233)
-99 // 负数
NaN // not a number
Infinity // 表示无穷大
字符串
'abc' "abc"
布尔值
true, false
逻辑运算
&& // 两个为真,才为真
|| // 一个为真,结果为真
! // 取反,真即假,假即真
比较运算符(!!!重要)
= // 赋值运算符
== // 等于(类型不一样,值一样,也会判断true)
=== // 绝对等于(类型一样,值一样,结果为true)
这是js的一个缺陷,坚持不要使用 == 进行比较
注意:
- NaN === NaN (false),这个NaN与所有的值都不相等,包括自己
- 只能通过isNaN(NaN)来判断这个数是否是NaN
浮点数问题
console.log((1/3) === (1-2/3)) // false
Math.abs(1/3-(1-2/3))<0.0000001 // true
JS中尽量避免使用浮点数进行运算,因存在精度问题
null和undefined
- null 空
- undefined 未定义
数组
Java的数值必须是相同的数据类型,JS不需要
// 保证代码的可读性,尽量使用[]
var arr = [1,2,3,4,5,'hello',null,true];
new Array(1,3,4,5,'hello')
取数组下标,如果越界,则显示undefined
对象
对象用大括号,数组用中括号
每个属性之间使用逗号隔开,最后一个不需要
var person = {
name:"Tom",
age:3,
tags:['js', 'java', 'web']
}
取对象的值
person.name
> "Tom"
person.age
> 3
2.4 严格检查模式
设置IDEA使支持ES6语法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
// 'use strict':严格检查模式,防止javascript的随意性
// 前提:IDEA必须设置支持ES6语法
// 必须写在第一行
// 在严格模式下,局部变量建议都使用let去定义
'use strict';
let i = 1;
</script>
</head>
<body>
</body>
</html>

浙公网安备 33010602011771号