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>
posted @ 2020-11-14 21:46  南国之川  阅读(97)  评论(0)    收藏  举报