Java零基础教学文档第四篇:HTML_CSS_JavaScript(3)

**【JavaScript】

1.JavaScript的简介

1.1 JavaScript的诞生**

在1995年前后,当时世界上的主流带宽为28.8Kbps,现在世界平均下载带宽为21.9Mbps。当时的网民,每提交一次表单,都需要等待很久才能收到服务器的回应,甚至很可能等了几分钟收到的却是说缺少了某一项。为了改善用户体验,嵌入浏览器客户端的能实现简单表单判断的脚本诞生了,这就是JavaScript。

JavaScript最早是工作于Netscape (网景公司)的 Brendan Eich为即将在1995年发行的NetscapeNavigator 2.0(NN2.0)开发的,当时叫做LiveScript。由于当时是和非常热门的Sun公司合作的,为了赶上当时的潮流------Java语言,这门语言被命名为JavaScript。

1.2 JavaScript跟Java有什么关系?

这也是外行人听到JavaScript的第一反应,也是这门语言被诟病最多的问题之一。

一开始JavaScript叫做LiveScript,但是由于当时Java这个语言特别火,所以为了傍大牌,就改名为JavaScript。如同"北大"和"xxxx鸟"的关系。"北大青鸟"就是傍"北大"大牌。

严格的说,没有半毛钱关系。如果非要扯上关系,也许就是两者的部分函数相同、面向对象思想、判断结构、循环语句相同等等等等,但这些显然不是Java的专利,而是编程语言的共识。

1.3 JavaScript的标准化及发展历史

JavaScript推出时,用户体验更好的NN 浏览器主宰了浏览器市场,而微软一直在追赶。在推出IE3的时候,微软发布了VBScript并以JScript为名,实际上和Netscape的JavaScript没有多大区别(用今天的话来讲就是山寨)。面对微软的竞争,Netscape和Sun公司将自己的JavaScript草案提交给ECMA(欧洲计算机制造商协会)对JavaScript进行了标准化,最后形成了ECMAScript 的第一个版本(ECMA-262)。

有意思的是,网景公司在标准化JavaScript之后,内部却出现了问题,JavaScript的研究停滞,而微软则趁机赶超,推出了IE4,内置了第一个遵循ECMA规范的JavaScript引擎,比NN提前了一年。再加上微软系统逐步占领计算机操作系统市场,其预装的IE浏览器市场份额逐渐加大,NN不断被挤占市场。然而,当微软失去了最大的对手后,它就没有了发展的动力,IE6~IE8,无论是界面渲染还是脚本执行,都互不兼容,成为浏览器史上的一朵奇葩,也是前端开发者的噩梦。

1.4 今天的JavaScript

2003年之前,JavaScript被认为"牛皮鲜",用来制作页面上的广告,弹窗、漂浮的广告。什么东西让人烦,什么东西就是JavaScript开发的。所以浏览器就推出了屏蔽广告功能。

2004年JavaScript命运开始改变了,那一年谷歌公司,开始带头使用Ajax技术了,Ajax技术就是JavaScript的一个应用。并且,那时候人们逐渐开始提升用户体验了。

2007年乔布斯发布了iPhone,这一年开始,用户就多了上网的途径,就是用移动设备上网。

JavaScript在移动页面中,也是不可或缺的。并且这一年,互联网开始标准化,按照W3C规则三层分离,人们越来越重视JavaScript了。

2010年的时候,人们更加了解HTML5技术了,HTML5推出了一个东西叫做Canvas(画布),工程师可以在Canvas上进行游戏制作,利用的就是JavaScript。

2011年,Node.js诞生,使JavaScript能够开发服务器程序了。

1.5 JavaScript的概述

JavaScript是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言,也是世界上最流行的编程语言。javascript的出现使得网页和用户之间实现了一种实时性的,动态性的,交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。同时javascript短小精悍,在客户机上执行,大大提高了网页的浏览速度和交互能力。

JavaScript ,它包含了三大部分:ECMAScript、DOM、BOM

l ECMAScript:ECMAScript是JavaScript这门语言的核心组成,是这门语言的精髓所在。包括变量定义,垃圾回收,语法,作用域等等,需要我们去不断钻研。

l DOM:文档对象模型(document object model)。我们知道标签的嵌套,就产生了父子关系,而DOM,提供了大量的API,让我们可以轻松操作DOM树。使用DOM,我们能动态修改页面内容,调整样式等等,这也是JS多样化的一个体现。

l BOM:浏览器对象模型(brower object model)。和DOM类似,只不过主体变成了浏览器。浏览器同样提供了大量的API,其中部分对JS开放,为我们提供了操作浏览器窗口的方法。

1.6 JavaScript的特点

  1. JavaScript是一种脚本语言(脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。),它采用小程序段的方式实现编程。像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个易的开发过程。

  2. JavaScript是一种基于对象的语言,同时以可以看作一种面向对象的。这意味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。这是我们在面向对象编程中非常喜欢看见的!

  3. 简单性:首先它是一种基于Java基本语句和控制流之上的简单而紧凑的设计,从而对于学习Java是一种非常好的过渡。其次它的变量类型是采用弱类型(代码结束后可以不用写分号,区分大小写,只有var一种数据类型),并未使用严格的数据类型。 int i = 10; var i = 10; boolean flag = true; var flag = true

  4. 安全性:它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。(这点体会还不深)

  5. 动态性:javascript可以直接对用户或者客户输入做出响应,无须经过Web服务程序。他对用户的反映响应,是采用以事件驱动的方式进行的。也就是当我们按下鼠标,移动窗口,采择菜单等事件发生时响应的。

  6. 跨平台性:Javascript是依赖浏览器本身,与操作环境无关,只要能运行浏览的计算机,并支持javascript的浏览器就可以正确执行。

2.第一个程序

2.1 程序的书写位置

HTML 中的脚本必须位于script>与/script 标签之间。

脚本可被放置在 HTML 页面的 body 或 head 中。

【示例】:把script标签放在head中

c 复制代码
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // ...
    </script>
</head>

【示例】把script标签放在body最后面

c 复制代码
<body>
    <h1>我是一个标题标签</h1>
    <script>
        // ...
    </script>
</body>

那些老旧的实例可能会在

注意:一个文档中可以书写多组script标签。

2.2 javaScript注释

程序中,为了便于理解、教学,我们可以写一些给人看的东西,这些内容就是注释,程序不会运行。

Ø 单行注释

c 复制代码
<script>
    // 单行注释
    // 我也是一个单行注释
</script>

Ø 多行注释

c 复制代码
<script>
    /*
    多行注释
    多行注释
    多行注释
    */

</script>

注意:使用多行注释的时候,切记不要相互嵌套。

在WebStorm中,单行注释的快捷键为:Ctrl+/,多行注释的快捷键为:Ctrl+shift+/

2.3 JavaScript输出

2.3.1 控制台输出

console.log控制台输出

c 复制代码
<script>
    console.log("Hello World!");
</script>

2.3.2 写入文档

通过JS动态的的写入文档

c 复制代码
<script>
    document.write("<h1>Hello World!</h1>");
    document.write("好开心啊");
</script>

2.4 引用外部JavaScript

外部引用就是引用HTML文件外部的JavaScript文件,这种方式可以使代码更清晰,更容易扩展。

我们可以通过HTML的script标签中的src属性来加载外部的JavaScript文件。

c 复制代码
<head>
    <meta charset="UTF-8">
    <title>外部引用JavaScript</title>
    <style>...</style>
    <script src="js/index.js"></script>
</head>

src:指向的是外部JavaScript文件,注意JavaScript文件必须使用js为文件后缀。

如果通过script标签中的src属性来引入外部的JavaScript文件,那么标签 cript/script之间不能添加代码块。

c 复制代码
<head>
    <meta charset="UTF-8">
    <title>外部引用JavaScript</title>
    <style>...</style>
    <!--注意:引入外部js文件的script标签中不能写代码块,因为写的代码块不会执行-->
    <script src="js/index.js">
        window.alert("我能弹出来吗???");
    </script>
</head>

注意:一个文档中可以包含多组script标签,代码的执行是由上到下顺序执行的。

3.variable变量

3.1 声明变量

l 变量名必须以字母(包含大小写字母)、下划线(_)、$和数字组成,变量不能以数字开头;

l 不能使用JavaScript中的关键字作为变量名(var、true等);

l JavaScript变量名是严格区分大小写的; wangErMaZi

l 变量命名使用"小驼峰"命名法则,第一个单词首字母小写,第二个单词起首字母大写,例如userName。

c 复制代码
<script>
    // 声明一个变量
    var $num;      // 正确
    var 12num;     // 错误
    var true;      // 错误
    var age;       // 变量名尽量取的有意义一些,一看变量的名字就知道是什么意思
    var Name;      // 建议小写字母开头
    var userName;  // 建议驼峰式命名
</script>

我们可以在一条语句中声明很多变量。该语句以var开头,并使用逗号分隔变量即可:

c 复制代码
<script>
    var age, name;

var age =20,name="李四";
</script>

3.2 变量赋值

我们可以先声明一个变量,然后再对这个变量赋值。

c 复制代码
<script>
    // 声明变量
    var age;
    var name;
    // 变量赋值
    age = 18;       // 赋值为一个整数, 可理解为: 年龄是18岁
    name = "ande";  // 赋值一个字符串, 可理解为: 名字是ande
    // 注意: 单引号或双引号中的内容代表为字符串
</script>

也可以声明和赋值合在一起写, 建议写法

c 复制代码
<script>
    var age = 18;
    var name = 'ande';
</script>

我们还可以在一条语句中声明和赋值多个变量。该语句以var开头,并使用逗号分隔变量即可:

c 复制代码
<script>
    var age = 18, name = 'ande';
</script>

3.3 变量类型

Java语言属于强类型语言,在强类型语言中,定义变量必须明确变量的数据类型,变量创建成功之后类型就不能改变啦,例如:

c 复制代码
public static void main(String[] args) {
    // 定义一个int类型变量
    int num1 = 10;
    // 定义一个double类型变量
    double num2 = 1.23;
    // 定义一个String类型变量
    String name = "ande";
}

JavaScript属于弱类型语言,定义变量的时候,我们只需要使用var关键字修饰即可。变量的类型由赋值的数据决定,我们可以通过 "typeof 变量名"或"typeof(变量名)"来查看变量的类型。

c 复制代码
<script>
    // 此时num为数值型(number)
    var num = 18;
    console.log(typeof num); // 输出:number
    // 对num再次赋值,此时num为字符串型(string)
    num = "ande";
    console.log(typeof(num)); // 输出:string
</script>

4.数据类型

JavaScript中的数据类型分为基本数据类型和引用数据类型。

基本数据类型: number、boolean、undefined、null、string

引用数据类型: Object(Array, Function, Object, Date等),后续再讲。

4.1 基本数据类型

4.1.1 number类型

Number类型,即数值类型, 包含:整数型、浮点型、NaN(not a number)和Infinity(正负无穷大)

定义一个整型:

c 复制代码
<script>
    var age = 18;
    console.log(age);           // 输出:18
    console.log(typeof age);    // 输出:number
</script>

定义一个浮点型:

c 复制代码
<script>
    var price = 12.8;
    console.log(price);         // 输出:12.8
    console.log(typeof price);  // 输出:number
</script>

注意:因为小数的存储特点,两个小数做运算,得到的结果未必精确。

c 复制代码
<script>
    var sum = 0.1 + 0.2;
    console.log(sum);           // 输出:等于0.3吗???
</script>

±Infinity正无穷大和负无穷大

c 复制代码
<script>
    var max = 1/0;
    console.log(max);         // 输出:Infinity
    console.log(typeof max);  // 输出:number

    var min = -1/0;
    console.log(min);         // 输出:Infinity
    console.log(typeof min);  // 输出:number
</script>

注意:在java语言中,如果分母为零,则直接抛出算数异常。

NaN全称: NOT A NUMBER。

我们可以通过isNaN()函数来判断某个变量是否为NaN,例如:如果value是NaN,则isNaN(value)返回的结果是true;如果value不是NaN,则isNaN(value)返回的结果是false。

c 复制代码
<script>
    var num = parseFloat("111a");  // Number(value), 此处是吧字符串转化为number类型
    console.log(num);          // 输出: NaN
    console.log(isNaN(num));   // 输出: true, 判断num是不是NaN类型
    console.log(typeof num);   // 输出: number
</script>

4.1.2 boolean类型

boolean: 布尔类型,布尔类型只有两个值:true 和 false

true: 表示为真或条件成立

false: 表示为假或条件不成立

boolean类型常用于条件判断中,如果条件成立,则返回true;条件不成立,则返回false。

c 复制代码
<script>
    var flag1 = 5 > 3;
    console.log(flag1);         // 输出:true
    console.log(typeof flag1);  // 输出:boolean

    var flag2 = 5 < 3;
    console.log(flag2);         // 输出:false
    console.log(typeof flag2);  // 输出:boolean
</script>

4.1.3 undefined类型

undefined类型只有一个值,就是undefined

表示只声明但未赋值的变量。

c 复制代码
<script>
    var num;
    console.log(num);         // 输出: undefined
    console.log(typeof num);  // 输出: undefined
</script>

4.1.4 string类型

string类型就是字符串,在JavaScript语言中,使用单引号或双引号包裹的内容,我们都称之为字符串。

c 复制代码
<script>
    // var str = "Hello Word!";
    var str = 'Hello Word!';
    console.log(str);          // 输出:"Hello Word!"
    console.log(typeof str);   // 输出:string
</script>

字符串简单使用:字符串的拼接,可以用"+"来做拼接。

c 复制代码
<script>
    var str1 = "Hello";
    var str2 = " World!";
    var str3 = str1 + str2;
    console.log(str3);         // 输出:"Hello Word!"
</script>

4.1.5 null类型

null类型只有一个值,就是null,从逻辑角度看,null值表示一个空对象指针。

c 复制代码
<script>
    var obj = null;
    console.log(obj);          // 输出:null
    console.log(typeof obj);   // 输出:object
</script>

因为null表示的是一个空对象的指针,所以使用typeof操作符检测null会返回object的原因。

本质上这是一个bug,因为当初设计JavaScript这门语言的时候比较仓促,后来发现的时候已经好多开发者在使用了,如果修改这个bug对原有项目的代码改动极大,所以就只能将错就错了。

4.2 数据类型转换

4.2.1 1.强制类型转换

JS中常见的3种强制类型转换

Number(value)------把给定的值转换成数字(可以是整数或浮点数)

Boolean(value)------把给定的值转换成Boolean型

String(value)------把给定的值转换成字符串

4.2.1.1 Number(value)

Number(value)------把给定的值转换成数字(可以是整数或浮点数),它转换的是整个值,而不是部分值。

c 复制代码
<script>
    console.log(Number("123.12"));     // 输出: 123.12
    console.log(Number("powernode"));        // 输出: NaN
    console.log(Number("123.12powernode"));  // 输出: NaN
</script>

4.2.1.2 Boolean(value)

Boolean(value)------把给定的值转换成Boolean型。

当value其值为 0、-0、null、""、false、undefined 或 NaN 时,那么Boolean()转换成Boolean类型的值为 false。

c 复制代码
<script>
    console.log(Boolean(-0));          // 输出: false
    console.log(Boolean(null));        // 输出: false
    console.log(Boolean(undefined));   // 输出: false
    console.log(Boolean(""));          // 输出: false
    console.log(Boolean(NaN));         // 输出: false
    console.log(Boolean(false));       // 输出: false
</script>

4.2.1.3 String(value)

String(value)------把给定的值转换成字符串

c 复制代码
<script>
    console.log(String(123));          // 输出: "123"
    console.log(String(true));         // 输出: "true"
    console.log(String(false));        // 输出: "false"
    console.log(String(undefined));    // 输出: "undefined"
    console.log(String(null));         // 输出: "null"
    console.log(String(NaN));          // 输出: "NaN"
</script>

4.2.2 隐式类型转换

我们知道:number类型和number类型可以相加,作为数字类型的加法运算; string类型也可以和string类型相加,相当于拼接字符串。

c 复制代码
<script>
    var number = 1 + 2;
    console.log(number);        // 输出:3

    var string = "Hello " + " World!";
    console.log(string);        // 输出:Hello World!
</script>

那么不同的数据类型可以相加吗? 比如string类型和number类型?

c 复制代码
<script>
    var str = "Hello World " + 2017;
    console.log(str);           // 输出: Hello World 2017
    console.log(typeof str);    // 输出: string
</script>

因为JavaScript的数据类型是非常弱的,在使用算术运算的时候,JS的引擎在运算之前把number类型悄悄的进行了隐式转换,把number类型隐式转换为string类型,然后做了string类型与string类型的拼接。

c 复制代码
<script>
    var num = 2 + true;
    console.log(num);           // 输出: 3
    console.log(typeof num);    // 输出: number

    var str3 = "22" + true;
    console.log(str3);          // 输出: 22true
    console.log(typeof str3);   // 输出: string
</script>

通过上面的代码输出结果我们发现,隐式转化其实也是按照我们前一节强制转换的规则来转换的,在我们今后的JavaScript学习过程中,会经常的遇到隐式类型的转换,所以大家一定要记住强制转换之间的规则,尤其是Boolean()的隐式转换。

总结: "+"既可以表示字符串连接,又可以表示算术加,这取决于它的操作数,如果有一个为字符串的,那么就是字符串连接了。

此外,隐士转换在if逻辑分支语句中也是用非常多。

例如:判断一个对象是否存在

c 复制代码
<script>
    var obj;
    if (obj) {
        console.log("该对象存在");
    } else {
        console.log("该对象不存在");
    }
</script>

思考: 以下代码输出值为? 值的类型为?

c 复制代码
<script>
    console.log(1 + 2 + "3");   // 输出:??? 数据类型:???
    console.log(1 + "2" + 3);   // 输出:??? 数据类型:???
    var a = 11;
    var b = 22;
    console.log("a + b");       // 输出:??? 数据类型:???
    console.log(a + "b");       // 输出:??? 数据类型:???
    console.log(a + b);         // 输出:??? 数据类型:???
</script>

通过隐式转换,把string转化为number

c 复制代码
<script>
    var str = "123.456";
    console.log(str - 0);           // 输出: 123.456
    console.log(typeof(str - 0));   // 输出: number
    // 也可以这样
    console.log(+str);              // 输出: 123.456
    console.log(typeof(+str));      // 输出: number
</script>

通过隐式转换,把number转化为string

c 复制代码
<script>
    var num2 = 123.456;
    console.log(num2 + "");          // 输出: 123.456
    console.log(typeof(num2 + ""));  // 输出: string
</script>

4.2.3 parseInt和parseFloat函数

4.2.3.1 parseInt函数

parseInt() 函数可解析一个字符串,并返回一个整数。

c 复制代码
<script>
    // 全是字母的时候
    console.log(parseInt("powernode"));              // 输出: NaN
    // 全是数字的时候
    console.log(parseInt("12.42"));            // 输出:12
    // 如果字母和数字都存在
    console.log(parseInt("123powernode"));           // 输出: 123
    console.log(parseInt("123powernode234node567")); // 输出: 123
    console.log(parseInt("node123"));           // 输出:NaN
</script>

总结:如果参数第一个字符不是数字,返回NaN;如果参数第一个字符是数字,则返回前面找到的所有的数字字符。

注意: 开头和结尾的空格是允许的。

c 复制代码
<script>
    console.log(parseInt(" 123123powernode"));       // 输出: 123
    console.log(parseInt(" 123 "));            // 输出: 123
</script>

4.2.3.2 parseFloat函数

parseFloat() 函数可解析一个字符串,并返回一个浮点数。

c 复制代码
<script>
    // 全是字母的时候
    console.log(parseFloat("powernode"));     // 输出: NaN
    // 全是数字的时候
    console.log(parseFloat(123));       // 输出: 123
    console.log(parseFloat(123.456));   // 输出: 123.456
    // 如果字母和数字都存在
    console.log(parseFloat("123.12powernode"));          // 输出: 123.12
    console.log(parseFloat("123.12powernode456powernode"));    // 输出: 123.12
    console.log(parseFloat("powernode123.1"));           // 输出: NaN
</script>

总结:如果参数的第一个字符不是数字,则返回NaN;如果参数的第一个字符是数字,则返回前面找到的所有的数字字符(包含小数)。

注意:开头和结尾的空格是允许的。

c 复制代码
<script>
    console.log(parseFloat(" 123.456node")); // 返回:123.456
</script>

5.弹出框

5.1 弹出框的分类

警告框 alert, 常用。

询问框 prompt返回提示框中的值。类型为string

确认框 confirm返回true/false 。

5.2 alert警告框

alert(message)的作用是弹出一个提示框或者警告框,纯提示作用

                           参数                    描述

message 在window上弹出的对话框中显示的纯文本

示例代码

c 复制代码
<script>
    alert("Hello World!");
</script>

因为alert是window对象的函数,也可以通过window.alert()来调用。

c 复制代码
<script>
    window.alert("Hello World!");
</script>

加粗样式 5.3 prompt询问框

prompt(message)的作用是弹出一个询问框,可以让用户输入一个值。

                                         参数                             描述

message 输入文字的提示信息

示例代码

c 复制代码
<script>
    var name = prompt("您没有登录,请输入用户名:");
    alert("your name: " + name);
</script>
 

因为prompt是window对象的函数,也可以通过window.alert()来调用。

c 复制代码
<script>
    var name = window.prompt("您没有登录,请输入用户名:");
    alert("your name: " + name);
</script>

5.4 confirm确认框

confirm(message)的作用是弹出一个提示框或者警告框,纯提示作用。

                                          参数                              描述

message 确认的提示信息

示例代码

c 复制代码
<script>
    var isLogin = confirm("您确认登录吗?");
    if (isLogin) {
        alert("您同意登录");
    }
    else {
        alert("您不同意登录");
        // alert("您不同意登录2");
    }
</script>

6.表达式与运算符

6.1 运算符的分类

1,算术运算符(+ - * / % ++ --)

2,赋值运算符(= += *= /= %=)

3,条件运算符(=== == > >= < <= != )

4,字符串运算符(+ +=)

5,逻辑运算符(&& || !)

6,三元运算符( (条件表达式1)?表达式2:表达式3 )

7,运算符优先级

6.2 赋值运算符

= 把右边的值赋值给左边。

6.3 算术运算符

6.3.1 2.1 二元运算符

加减乘除

c 复制代码
<script>
    var num1 = 7;
    var num2 = 2;
    console.log(num1 + num2);  // 输出:9
    console.log(num1 - num2);  // 输出:5
    console.log(num1 * num2);  // 输出:14
    console.log(num1 / num2);  // 输出:3.5
</script>

取余,返回两个数相除之后的余数

c 复制代码
<script>
    console.log(5 % 2);     // 输出:1
    console.log(8 % 3);     // 输出:2
    console.log(5 % 1);     // 输出:0
</script>

【课堂练习】

获取一个三位数的整数的个位、十位和百位

6.3.2 2.2 一元运算符

++ 自增运算符。如num++和++num,都等价于num = num + 1

num++和++num的区别

++num 先自增,后参与运算

num++ 先参与运算,后自增

-- 自减运算符。如num--和--num,都等价于num = num - 1

num--和--num的区别

--num 先自减,后参加运算

num-- 先参与运算,后自减

注意:5++或++5是错误的,想想这是为什么呢?

【课堂练习】

var a = 3, b = 4; 求a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b的值

6.4 赋值运算符

赋值运算符相对于比较简单,此处就不做过多的讲解。

只需要注意一点:

c 复制代码
<script>
    var x = 10;
    var y = 20;
    x += y;     //正确
    // 注意:赋值运算符之间不能加空格
    x + = y;    //错误
</script>

6.5 比较运算符

比较运算符常用在逻辑语句中使用,以测定变量或值是否相等。

比较运算返回一个boolean类型的值,满足条件返回true, 否则返回false。

6.5.1 等于(==)

== 只比较内容,不比较类型。只要内容的值相同,返回true,否则返回false。

c 复制代码
<script>
    console.log(10 == 10);    // 输出: true
    console.log(10 == 11);    // 输出: false

    console.log(10 == "10");  // 输出: true
    console.log(10 == "9");   // 输出: false
</script>

6.5.2 全等于(===)

=== 既要比较内容,还要比较类型。只有内容和类型都相同才返回true,否则返回false

c 复制代码
<script>
    console.log(10 === 10);    // 输出: true
    console.log(10 === "10");  // 输出: false
</script>

注意:"="是赋值运算符,""或"="才是比较两个内容是否相等

6.5.3 不等于(!=)

!= 只比较内容,不比较类型。

c 复制代码
<script>
    console.log(10 != 9);      // 输出: true
    console.log(10 != "9");    // 输出: true
</script>

6.5.4 不全等于(!==)

!== 既要比较内容,还要比较类型。

c 复制代码
<script>
    console.log(10 !== "10");  // 输出: true
    console.log(10 !== 9);     // 输出: true
</script>

6.6 逻辑运算符

6.6.1 &&(逻辑与)

&&(逻辑与) 表示"而且"的意思,属于短路运算。

6.6.1.1 当值为boolean类型时

判断第一个参数, 如果第一个参数为true, 则直接返回第二个数。

c 复制代码
<script>
    console.log(true && true);    // 输出: true
    console.log(true && false);   // 输出: false
</script>

判断第一个参数, 如果第一个参数为false, 则直接返回第一个数。

c 复制代码
<script>
    console.log(false && true);   // 输出: false
    console.log(false && false);  // 输出: false
</script>

总结: 逻辑与对于布尔值,只要有一个false,就返回false。

判断第一个参数, 如果第一个参数为true,,则直接返回第二个数。

判断第一个参数, 如果第一个参数为false,,则直接返回第一个数。

6.6.1.2 当值为非boolean类型时

先判断第一个数, 如果第一个数为true, 则返回第二个数; 如果第一个参数为flase, 则直接返回第一个数。

注意: 值是否为true或false,是根据数值的隐式boolean转换而来的。

c 复制代码
<script>
    var str = "hello" && "world";            // 输出: "world"

    var str = 0 && 2;                        // 输出: 0
    var str = "haha" && 4;                   // 输出: 4

    var str = "hello" && "";                 // 输出: ""
    var str = "" && "hello";                 // 输出: ""

    var str = null && {"name" : "admin"};    // 输出: null
    var str = {"name" : "admin"} && null;    // 输出: null

    var str = undefined && "name";           // 输出: undefined
    var str = "name" && undefined;           // 输出: undefined

    var str = NaN && "name";                 // 输出: NaN
    var str = "name" && NaN;                 // 输出: NaN
</script>

【随堂练习】

1、判断一个数是否在4(包含)~6(不包含)之间;

6.6.2 ||(逻辑或)

||(逻辑或) 表示"或者"的意思,属于短路运算。

6.6.2.1 当值为boolean类型时

判断第一个参数, 如果第一个参数为true,则直接返回第一个数

c 复制代码
<script>
    console.log(true || true);    // 输出: true
    console.log(true || false);   // 输出: true
</script>

判断第一个参数, 如果第一个参数为false,则直接返回第二个数

c 复制代码
<script>
    console.log(false || true);   // 输出: true
    console.log(false || false);  // 输出: false
</script>

总结: 逻辑或对于布尔值,只要有一个为true, 就返回true

判断第一个参数, 如果第一个参数为true,则直接返回第一个数

判断第一个参数, 如果第一个参数为false,则直接返回第二个数

6.6.2.2 当值为非boolean类型时

先判断第一个数, 如果第一个数为true, 则返回第一个数; 如果第一个参数为flase, 则直接返回第二个数。

注意: 值是否为true或false,是根据数值的隐式boolean转换而来的。

c 复制代码
<script>
    var str = "hello" || "world";            // 输出: "hello"
    var str = null || undefined;             // 输出: undefined

    var str = 0 || 2;                        // 输出: 2
    var str = "haha" || 4;                   // 输出: "haha"

    var str = "hello" || "";                 // 输出: "hello"
    var str = "" || "hello";                 // 输出: "hello"

    var str = null || {"name" : "admin"};    // 输出: {"name" : "admin"}
    var str = {"name" : "admin"} || null;    // 输出: {"name" : "admin"}

    var str = undefined || "name";           // 输出: "name"
    var str = "name" || undefined;           // 输出: "name"

    var str = NaN || "name";                 // 输出: "name"
    var str = "name" || NaN;                 // 输出: "name"
</script>

【随堂练习】

1、判断一个数是否在4(包含)~6(包含)之外;

6.6.3 !(逻辑非)

!(逻辑非) 表示取反的意思

6.6.3.1 当值为boolean类型时

c 复制代码
<script>
    console.log(!true);    // 输出: false
    console.log(!false);   // 输出: true
</script>

6.6.3.2 当值为非boolean类型时

c 复制代码
<script>
    console.log(!true);                      // 输出: false
    console.log(!false);                     // 输出: true

    console.log(!"哈哈");                    // 输出: false
    console.log(!{});                        // 输出: false
    console.log(!3);                         // 输出: false

    console.log(!"");                        // 输出: true
    console.log(!0);                         // 输出: true
    console.log(!null);                      // 输出: true
    console.log(!undefined);                 // 输出: true
    console.log(!NaN);                       // 输出: true
</script>

6.7 三目运算

三目运算语法:

条件表达式 ? 满足条件执行 : 不满足条件执行

找出两个数中的最大值

c 复制代码
<script>
    var max = a > b ? a : b;
    console.log("max: " + max);
    // 或者这样
    var value = a > b ? "最大值为: " + a : "最大值为: " + b;
    console.log(value);
</script>

6.8 操作符优先级

7.选择结构

7.1 if语句

if...else语句完成了程序流程中的分支功能,如果其中的条件成立,则程序执行相应的语句。

if...else语句的语法如下:

if(条件){

执行语句

}else{

执行语句

}
7.2 switch语句

分支语句switch可以根据一个变量的不同取值而采取不同的处理方法,在程序设计中提供不同的分支,这样的语句叫做分支语句。

Switch语句的语法如下:

switch (expression){

case const1:

语句块1

case const1:

语句块2

......

default:

语句块N

}

在同时可以使用switch和if时推荐使用switch以获得更好的效率

8.循环结构

8.1 for循环

for (初始化部分;条件部分;更新部分){

语句块... 

}

for (var i=0;i<=10;i++) {

 alert(i);

}

8.2 while循环

while(条件) {

语句块;

}

var i=0;

while(i<=10){

alert(i);

i++;

}

8.3 do-while

do{

语句块;

}while(条件)

var i=0;

do{

alert(i);

i++;

}while(i<=20);

break语句是结束当前的循环,并把程序的控制权交给循环的下一条语句。

这里是结束循环,循环到此为止

continue语句是结束当前的某一次循环,但是并没有跳出整个的循环。

这里是结束一次循环,整个循环还在进行

9.字符串

string字符串是用来存储一系列的字符的集合, 用于存储和处理文本,在js中属于基本数据类型中的一种。

9.1 字符串的创建

通过字面量来创建字符串

var str1 = "hello world!";

var str2 = 'hello world!';

console.log(str1); // 输出:"hello world!"

console.log(str2); // 输出:"hello world!"

注意:可以用双引号,也可以用单引号。

通过new String()的方式创建字符串

var str3 = new String("hello powernode");

console.log(str3); // 输出:"hello powernode"

9.2 字符串常用的属性

获取字符串的长度

var str1 = "hello world!";

console.log(str1.length);

9.3 字符串常用的方法

9.3.1 获取指定索引的字符

string.charAt(n), n取值从0开始, 取值范围为0~length-1, 超出范围返回空字符串。

var str = "你好,武汉!";

console.log(str.charAt(1)); // 输出:"好"

console.log(str.charAt(100)); // 输出:""

9.3.2 字符串截取

9.3.2.1 subStr字符串截取 substring

string.subStr(start, [length])

start: 截取字符串的起始位置 (包含起始位)

length:【可选】截取字符串的长度,不设置长度默认字符串的截取从开始到结束

返回值:成功返回返回指定位置的字符串, 失败返回空字符串

9.3.2.2 slice字符串截取

string.slice(start, [end])

start: 截取字符串的起始位置(包含起始位置)

end:【可选】截取字符串的截止位置(不包含结束位置),不设置结束位置默认字符串的截取从开始到结束

返回值:成功返回返回指定位置的字符串, 失败返回空字符串

var str = "hello world!";

console.log(str.slice(2)); // 输出:"llo world!"

console.log(str.slice(2, 7)); // 输出:"llo w"

// 当第一个参数需求,第二个参数超出字符串长度的时候,默认截取到字符串结束位置

console.log(str.slice(2, 700)); // 输出:"llo world!"

9.3.3 大小写字母转换

9.3.3.1 toLocaleUpperCase()

var str = "hello world!";

console.log(str.toLocaleUpperCase()); // 输出:"HELLO WORLD!"

9.3.3.2 toLocaleLowerCase()

var str = "HELLO WORLD!";

console.log(str.toLocaleLowerCase()); // 输出:"hello world!"

9.3.4 字符串转化为数组

string.split(value), 根据value来把字符串转化为数组

var str1 = "ni-hao-ma-?";

var arr1 = str1.split("-");

console.log(arr1); // 输出:["ni", "hao", "ma", "?"]

var str2 = "ni hao ma ?";

var arr2 = str2.split(" ");

console.log(arr2); // 输出:["ni", "hao", "ma", "?"]

9.3.5 字符串编码解码

为什么要对字符串进行编码和解码?

只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*'(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。如果网址路径中包含汉字,那么就需要对中文的字符进行编码

9.3.5.1 编码

encodeURIComponent()返回编码为有效的统一资源标识符 (URI) 的字符串

var url = "http://www.baidu.com/login?username=德玛\&password=不告诉你";

var encodeURL = encodeURIComponent(url);

返回值:

http%3A%2F%2Fwww.baidu.com%2Flogin%3Fusername%3D%E5%AE%89%E5%BE%B7%26password%3D%E4%B8%8D%E5%91%8A%E8%AF%89%E4%BD%A0

9.3.5.2 解码

解码跟编码一致,把编码好的字符转化为编码前

console.log(decodeURIComponent(encodeURL));

返回值:

http://www.baidu.com/login?username=安德\&password=不告诉你

console.log("encodeURI: "+encodeURI(s4));

    console.log("decodeURI:   "+decodeURI("http://wwww.baidu.com?txt=java%E7%AE%80%E5%8D%95%E5%90%97"));

//将其他普通字符串编码与解码

    var s5 = "哈哈,你是王二麻子";

    console.log("escape: "+escape(s5));

    console.log("unescape:  "+ unescape("%u54C8%u54C8%uFF0C%u4F60%u662F%u738B%u4E8C%u9EBB%u5B50"));

9.3.6 特殊字符处理

如何表示以下字符串呢?

"恩格斯说过:"一个民族要想站在科学的高峰,就一刻也不能没有理论思维。""

在 JavaScript 中,字符串使用单引号或者双引号来起始或者结束。

那么以上的字符串将被截为多个字符串, 要解决这个问题那么此处就需要用到转义符了。

在JavaScript 中我们可以使用反斜杠来向文本字符串添加特殊字符。

下面的表格列出了其余的特殊字符,这些特殊字符都可以使用反斜杠来添加到文本字符串中:

代码 输出

' '

" "

\ \ \

\n 换行符

\t 制表符

9.3.6.1 常见的转义字符

var str = "恩格斯说过:"一个民族要想站在科学的高峰,就一刻也不能没有理论思维。"";

输出单引号

console.log('好好'学习'); // 输出:好好'学习

输出反斜杠

console.log("好好\学习\"); // 输出:好好\学习\

9.3.6.2 转义符""的妙用

假如我们需要以下的字符串,我们该怎么用字符串去表示呢?

c 复制代码
var html = "<ul>

               <li>武汉</li>

               <li>北京</li>

               <li>上海</li>

               <li>广州</li>

               <li>重庆</li>

            </ul>";

常规的解决方式:

c 复制代码
var html = "<ul>"
    +"<li>武汉</li>"
    +"<li>北京</li>"
    +"<li>上海</li>"
    +"<li>广州</li>"
    +"<li>重庆</li>"
    +"</ul>";

以上方式太麻烦, 我们也可以这样来实现

c 复制代码
var html = "<ul>\
           <li>武汉</li>\
           <li>北京</li>\
           <li>上海</li>\
           <li>广州</li>\
           <li>重庆</li>\
        </ul>";

document.write(html);

相关推荐
一棵开花的树,枝芽无限靠近你7 分钟前
【PPTist】添加PPT模版
前端·学习·编辑器·html
陈王卜10 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、10 分钟前
Spring Boot 注解
java·spring boot
java亮小白199715 分钟前
Spring循环依赖如何解决的?
java·后端·spring
飞滕人生TYF22 分钟前
java Queue 详解
java·队列
武子康43 分钟前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康1 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
苏-言1 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
土豆湿1 小时前
拥抱极简主义前端开发:NoCss.js 引领无 CSS 编程潮流
开发语言·javascript·css
界面开发小八哥1 小时前
更高效的Java 23开发,IntelliJ IDEA助力全面升级
java·开发语言·ide·intellij-idea·开发工具