博客列表 >javascript基础语法-2019年1月16日 20:00

javascript基础语法-2019年1月16日 20:00

小淇的博客
小淇的博客原创
2019年01月21日 09:50:31813浏览

javascript

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

三大特点:


* 语法灵活,表达力强

* 支持编译运行

* 事件驱动和非阻塞设计

---------------------------------------------------

# js引入方式


1.直接在元素的事件方法属性上写js代码

2.将js脚本写script标签中,仅限当前页面使用

3.将js脚本写到外部的js文件中


js数组的常用函数(slice()和splice())

定义和用法

slice() 方法可从已有的数组中返回选定的元素。

实例

var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr.slice(1) + "<br />")

输出结果:

John,Thomas

定义和用法

splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

实例

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"
arr.splice(2,0,"William")

输出结果:

George,John,William,Thomas,James,Adrew,Martin


实例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js脚本的引入方式</title>
</head>
<body>
<!-- 1.直接在元素的事件方法属性上写js代码 -->
<!-- onclick是click事件对应的方法,this默认指向当前元素对象,可以省略 -->
<h3 id="tips" onclick="alert(this.id)">JavaScript很好玩的</h3>
<h3 id="tips" onclick="alert(id)">JavaScript很好玩的</h3>


<!-- 在表单中,事件方法属性可以直接使用表单元素的name属性访问同一个form标签内的元素 -->
<form action="">
<input type="text" name="site" value="php中文网">
<button type="button" onclick="alert(site.value)">显示站点</button>
</form>

<!-- 更多情形下, 事件方法属性的值是一个JS函数(函数我们后面会专门讨论) -->
<form action="">
<input type="text" name="username" placeholder="用户名">
<button type="button" onclick="check(username)">验证</button>
</form>
<!-- 2.将js脚本写script标签中,仅限当前页面使用 -->
<script>
function check(username) {
// js中的注释写法: 单行
/*
            该函数用来验证用户名是否为空
            */
if (username.value.length === 0) {
alert('用户名空空如也');
} else {
alert('验证通过');
}
}
</script>

<!-- 3. 将js脚本写到外部的js文件中 -->
<!-- 在页面放一个小球,然后让他运行起来,我们将对应的js脚本写到外部 -->
<style>
#ball {
width: 80px;
height: 80px;
background-color: lightgreen;
border-radius: 50%;
box-shadow: 2px 2px 2px #888;
/* 小球相于对原始位置发生位移 */
position: relative;
}
</style>
<div id="ball"></div>
<script>
// 获取小球
var ball = document.getElementById('ball');

// 设置动画函数
function running(){
var count = 0;  // 设置计数器并初始化
// 设置定时器方法,每隔100毫秒间歇调用
var timer = setInterval(function (){
// 当运行次数小于100时,自动递增左和上的坐标值
if (count < 100) {
ball.style.left = ball.style.top = count + 'px';
count++;
} else {    // 否则就清除定时器终止运动
clearInterval(timer);
}
}, 100);
}

// 给小球添加点击事件, 并指定事件对应的方法函数
// ball.onclick = running;


// 事件也可以这样添加, 设置事件监听器, 这样写的优点是可以同时设置多个事件方法
// false 是指是冒泡阶段触发该事件, true 是指是捕获阶段触发,感兴趣同学可查阅相关资料, 这不在教学计划中
ball.addEventListener('click', running, false);
</script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


# 语法概述

## 1. 基本句法和变量

### 1.1 语句

实例

`var a = 1 + 3;`执行过程

* `var`声明变量`a`

* 将表达式`1 + 3`的运算结果赋值给变量`a`


* 语句以可选的分号`;`结尾

* 表达式和语句很像,但是有区别的:

* 表达式必须且一定返回一个值,语句不一定

* 语句可以包括多个表达式

* 表达式不需要分号结束:`1+3;`,`abc;`这样的语句虽有返回值但无意义


---------------------------------------------------------------

### 1.2 变量

* 变量是对`值`的引用,使用变量等同于引用一个值

* 每一个变量,都必须要有一个变量名称


`var a = 1;` 语句的解析:


* 先声明变量`a`,在变量`a`与数值`1`之间建议引用关系

* `var`是变量声明, 通过js解释器,创建一个变量`a`并分配内存

* 变量的声明和赋值(初始化)是可以独立分开的二个步骤

* 上面的代码也可以分解为:

* `var a;`

* `a = 1;`

* 如果仅声明未赋值:`var a;`,则`a = undefined;`

* js允许省略`var`,对未声明的变量赋值:`b = 2`,会创建全局变量污染全局环境

* 所以应该始终使用`var`声明变量并赋值,因为`var`会自动将变量与当前上下文绑定

* 如果变量未声明直接使用,如`x`,js引擎会直接报错`x is not defined(x变量未定义)`

* js是动态语言, 变量可赋予任何类型的值: `var a = 1; a = 'abc';` 均正确

* `var a = 1;`已经声明过了, 再用时不需要再声明`a='abc';`,如果再用`var`则又声明一个变量

* `var`声明的变量名允许重复,后面声明的会覆盖掉前面的同名变量

---------------------------------------------------------------

### 1.3 变量提升

* JS引擎工作时,先解析代码获取到所有的变量声明,并提升到代码的顶部,再一行一行的执行代码

* 造成的结果就是所有的变量声明会被提升所有语句的最前后, 这种现象叫:**变量提升**(hoising)

实例

console.log(a); // undefined
var a = 1;

根据前面知识,第一行语句应该出错才对,但却输出了`undefined`,这是为什么呢?

* 输出`undefined`表示变量`a`已声明,只是未初始化(赋值)罢了,究竟在哪声明了变量`a`呢?

* 原因在于第二条语句:`var a = 1;`,引擎自动将变量`a`的声明提前到了代码的顶部第一行

* 所以以上二行代码与下面的代码段是等价的:

实例

var a;
console.log(a); // undefined
var a = 1;

* 变量提升仅针对使用了`var`关键字声明的变量

实例

console.log(b); // ReferenceError: b is not defined
b = 1;

### 1.4 标识符

* 标识符(identifier)是用来识别具体对象的一个名称,最常见的就是变量名和函数名(后面介绍)

* js对标识符大小是敏感的: `name`和`Name`是二个完全不同的标识符

* 标识符有一套自己的命名规则,必须严格遵守

* 第一个字符可以是任何的`Unicode字母`,以及`$`和下划线`_`

* 第二个字符以及后面的字符,可以使用`数字`

* 合法:`args1, _var, $ele`, 非法: `1w, 89, a-b, -y`

* 中文是合法标识符:`var 姓名 = 'Pete';`,但不推荐这样使用

* JavaScript有一些保留字,不能用作标识符

* `arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield`

* `undefined, Infinity, NaN`虽不是保留字,但有特殊意义,也不要用做标识符


---------------------------------------------------------------

### 1.5 注释

* 代码中被js引擎忽略不解析的部分叫`注释`

* `注释`虽然会使源代码变长,但会增强代码的可读性与可维护性,必须给予重视

* 写注释是很好的编程习惯,很多优秀商业源码, 注释会占到二分之一

* 注释分为单行和多行注释二类

* 单行注释以: `//`开始

* 多行注释以: `/*`开始, `*/`结束, 注释文本放在`/* 注释 */` 之间

实例

// 单行注释



/*

多行注释

......

*/

> 历史原因, js会兼容html注释`<!-- 注释 -->`(解析为单行)

---------------------------------------------------------------


### 1.6 区块


* js可以使用大括号`{...}`将多条相关语句组织在一起,称为`区块`

* 与其它编程语言不同,js`区块`不能创建独立的作用域(scope)

* 但是, js中的函数会创建出一个独立的作用域,这和其它语言是类似的

实例

{
    var a = 1;
}
console.log(a);

* 以上是一个单独的区块,其实这样的区块没有实际意义,应该与语法结构配合(判断/循环)

* 区块内声明的变量`a`并未创建作用域,所以区块外部仍能访问到,与没有使用区块没有区别

---------------------------------------------------------------

### 1.7 条件语句

js 使用 `if` 和 `switch` 二种结构,完成判断

#### 1.7.1 if 结构

判断表达式生成的布尔值,根据这个值的***,执行不同的语句

实例

var grade = 70;
if ( grade >= 60 ) {
    console.log('合格');
}

* 表达式必须放在一对圆括号内,才可以进行运算求值

* `()`是js中的计算表达式的语法,非常重要,以后只要看到`()`就意味着执行或调用

* `(a<100)`表示对表达式`a<100`求值, 结果是一个`布尔值`(只有`true真`和`false假`)

* 其实上面的大括号中执行体只有一条语句,可以省略大括号的:`if (a<100) console.log(a);`

* 但是建议加上大括号,以方便以后添加新语句

### 1.7.2 if ~ else 结构

`if` 代码块后面再跟一个`else`代码块,表示当表达式为假值`false`时要执行的代码

实例

var grade = 70;
if ( grade >= 60 ) {
    console.log('合格');
} else {
    console.log('补考');
}

如果需要对一个变量进行多次判断,可以将多个`if ~ else`语句连接在起

实例

var grade = 70;
if ( grade >= 60 && grade < 80 ) {
    console.log('合格');
} else if (grade >= 80 && grade < 90) {
    console.log('良好');
} else if (grade >= 90) {
    console.log('优秀');
} else {
    console.log('补考');
}

`else`总是跟在离它最近`if`配对

实例

var grade = 70;
if ( grade >= 60) {
    if (grade < 80) {
        console.log('合格');
    } else {
        if (grade < 90) {
            console.log('良好');
        } else {
            console.log('优秀'); 
        }
    }
} else {
    console.log('补考');
}

### 1.7.3 switch 结构

当多个`if ~ else if`一起使用时, 转变为`switch`结构会使业务逻辑更加的清晰和方便

还是以上面的案例,用`switch`改写:

> 注意switch()的参数是**true**, 思考这是为什么?

实例

var grade = 70;
var grade = 70;
// 这里必须传入true,否则内部除了default外,不会执行任何分支
// 这种情形适用于case 条件是一个条件表达式,而不是一个离散的具体值
switch (true) {
case (grade >= 60 && grade < 80):
console.log('合格');
break;
case (grade >= 80 && grade < 90):
console.log('良好');
break;
case (grade >= 90):
console.log('优秀');
break;
default:
console.log('补考');
}

switch()`更多应用于如下场景

实例

// 根据语言英文名称,输出对应的中文解释
var lang = 'javascript';
// 去掉前后误输的空格并强制全部转为小写,以便于判断
switch(lang.trim().toLowerCase()) {
    case 'html':
        console.log('超文本标记语言');
        break;
    case 'css':
        console.log('层叠样式表');
        break;
    case 'javascript':
        console.log('前端脚本语言');
        break;
    default:
        console.log('输入错误');
}

---------------------------------------------------------------

### 1.8 循环语句

#### 1.8.1 while 结构

`while结构`用于循环: `while(条件){循环体}`,只要条件为`true`就不断循环

实例

while (expression) {
    statement  //由一条或多条语句组成循环体
}

实例

var i = 0;
while (i<10) {
    console.log(i);
    i++;    // 必须要设置循环终止的条件,否则会陷入死循环
}

#### 1.8.2 for 结构

语法:

```javascript

for (循环条件初始化; 判断循环条件; 更新循环条件) {

循环体内的语句

}

```


1. 循环条件初始化: 只在循环开始时执行一次

2. 判断循环条件: 检查条件,只要为真就执行循环体内的语句,会执行多次

3. 更新循环条件: 大多是自增/自减操作,更新条件后返回到中间部分继续判断并执行

实例

// 循环遍历数组
var arr = ['html', 'css', 'javascript'];
for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

`for 循环`很容易改写成 `while 循环`:

实例

// 循环遍历数组
var arr = ['html', 'css', 'javascript'];
var i = 0;
while (i < arr.length) {
    console.log(arr[i]);
    i++;
}

#### 1.8.3 do ~ while 结构

与`while循环`唯一区别在于循环条件的判断时间,它是在执行出口再判断,所以至少会执行一次循环体

基本语法:

```javascript

do {

statement  //由一条或多条语句组成循环体

} while (expression)

改写上面的`while`案例

// 如果将循环条件修改为假值,例如: var i = 15,你会发现至少会执行一次

实例

var i = 0;
do {
    console.log(i);
    i++;
} while (i<10);

#### 1.8.4 break / continue 语句


* `break`跳出代码块或循环

* `continue`立即终止本次循环,开始下一次循环

实例

// 只输出奇数
var arr = [12,5,3,18,9,72];
for (var i = 0; i < arr.length; i++) {
    // 当模除为0时(即能被2整除)则为偶数,应该跳过
    if (arr[i] % 2 === 0) continue;
    console.log(arr[i]);  // 输出: 5, 3, 9
}

#### 1.8.5 label 标签语句


`标签`通常与`break`和`continue`配合跳出特定的循环


// 跳出双重循环

实例

top:
    for (var i=0;i<3;i++){
        for (var j=0;j<3;j++){
            if (i===1 && j===1) break top;
            console.log("i="+i+",j="+j);
        }
}
// i=0,j=0
// i=0,j=1
// i=0,j=2
// i=1,j=0

这里也可以换成`continue`:

实例

// 跳出双重循环
top:
    for (var i=0;i<3;i++){
        for (var j=0;j<3;j++){
            //如果这里不使用标签,只退本层循环, 外层仍是继续执行
            if (i===1 && j===1) continue top;
            console.log("i="+i+",j="+j);
        }
}
// i=0,j=0
// i=0,j=1
// i=0,j=2
// i=1,j=0
// i=2,j=0
// i=2,j=1
// i=2,j=2

## 2. 数据类型


### 2.1 概述


* js中的每一个值必须属于某一个类型,如同每一个人必须要有一个身份与之对应

* js中数据类型共有6个类型和2个特殊值

* 基本6种类型又可以分为: 原始类型(primitive type),合成类型(complex type)

* 原始类型:

* `Number`: 数值, 如 `1,20,3.14`

* `String`: 字符串, 如 `'hello',"javascript"`

* `Boolean`: 布尔型, 只有二个值`true`和`false`

* 合成型:

* `Object`: 对象, 如`var obj = {x:10, y: 20}`

* `Array`: 数组, 如 `var arr = [1,2,3,4]`

* `Function`: 函数, 如 `function sum(x, y){return x + y;}`

* 对象和数组是**数据组合的方式**

* 函数是**数据处理的方法**/过程

* js将函数做为数据类型,可以将函数当做**表达式**进行赋值和传递,体现**函数式语言**本质

* js所有数据都可看成对象,包括原始类型(Number/String/Boolean)都可以像对象一样调用

* 除6个类型之外, 还有2个特殊值: `null`和`undefined`,分别属于`Null`和`Undefined`类型


#### 2.1.1 用字面量创建各种类型的数据

实例

// 1.原始类型
var num = 150; // 数值型
var name = 'peter'; // 字符串
var isMarried = true; // 布尔值



// 2.数组
var arr = [35, 'php', true];
console.log(arr.length); // 查看元素数量
var arr = ['peter',['html','css','javascript']]; // 可嵌套
//访问(包括读写)
console.log(arr[1]);
arr[0] = 50;
console.log(arr[0]);
// 遍历,forEach(callback)
arr.forEach(function(value,index,arr){
    console.log(value);
    console.log(arr[index]);
})
//常用的函数
// FIFO,先进出的栈操作
//尾部增删
var arr = [];
arr.push(1);
arr.push(2);
arr.push(3);
arr.pop();  // 3
arr.pop();  // 2
arr.pop();  // 1
//头部增删
var arr = [];
arr.unshift('a');
arr.unshift('b');
arr.unshift('c');
arr.shift();  // 'c'
arr.shift();  // 'b'
arr.shift();  // 'a'
// 获取部分元素,返回Array
var arr = [1,2,3,4,5,6]; // 返回从索引2到4之间元素(不含索引4)
console.log( arr.slice(1,4) );  // [2,3,4]
console.log( arr.slice(1,-2) );  // [2,3,4],尾部从-1开始
// 增加和删除元素,返回删除的元素数组
// splice(开始索引, 要删除的数量(0表示不删除), 要添加的元素(多个逗号分开))
var arr = [1,2,3,4,5,6,7,8];
arr.splice(2,0,'a'); // 从第三个位置添加一个元素,非删除操作,返回空数组
console.log(arr);  // [1, 2, "a", 3, 4, 5, 6, 7, 8]
arr.splice(4,2);  // 从第5个位置删除2个,返回 [4, 5]
console.log(arr); // [1, 2, "a", 3, 6, 7, 8]
// 更新,实际上分二步完成:1.删除:是先删除指定元素, 2.添加: 再添加新元素到这个位置上
arr.splice(2,1,'php');  // ['a']
console.log(arr); // [1, 2, "php", 3, 6, 7, 8]
// 数组与字符串之间的转换
// Array -> String
arr.join(); // 默认逗号分隔: "1,2,php,3,6,7,8"
arr.join('-');  // 可自定义分隔符: "1-2-php-3-6-7-8"
// String -> Array
var str = 'html, css, javascript';
var arr = str.split(','); // 用逗号切割:["html", " css", " javascript"]
// 排序,默认全部转为字符串方式,按字母表自然顺序排序
arr.sort();  // [" css", " javascript", "html"]

实例

// 3.对象
var obj = {x: 10, y: 'die', z: 30};
console.log(obj.x);
console.log(obj['x']);
obj.y = 'live';
console.log(obj.y);
//遍历
console.log(Object.keys(obj)); // 返回对象属性/键名数组
Object.keys(obj).forEach(function(key){
    console.log(key, '=>', obj[key]);
})
// 遍历所有属性(包括原型链上的属性): js是基于原型链继承,这与其它语言是不同的,进阶课程再讨论
// 使用 for in 遍历所有属性
for (key in obj) {
    console.log(key, '=>', obj[key]);
}
//对象属性值可以是任何类型
var obj = {id: 10, name: 'jack', course: ['php','java']};
console.log(obj.course[0]);
// 对象的操作非常复杂,功能也很强大, 更多的方法和属性,大家可课后查阅相关资料扩展

实例

// 4.函数也可以使用字面量声明
function hello(name) {
    return 'Hello ', name;
}
// 调用,函数名(实参)
console.log(hello('Peter Zhu'));
// 如果没传参,可设置默认参数
function hello(name) {
    var who = name || '朱老师';
    return 'Hello ', who;
}
console.log(hello())

// js是函数式语言,函数可以看成一个普通的数据类型,可以当作值使用,可以给其它变量赋值,传递
// 所以,可以将函数赋值给一个变量,通过这个变量来调用这个函数
// sum叫函数表达式, 它的值是一个匿名函数
var sum = function (a,b) {
    return a + b;
}
console.log('sum = ', sum(10,20));

### 2.2 typeof 运算符


* js有三种方式确定一个值到底属于什么类型?

* `typeof`运算符

* `instanceof`运算符

* `Object.prototype.toString()`方法

* 本节先学习: `typeof`运算符,它可以返回一个值的类型


#### 2.2.1 类型检测

实例

// 原始类型
typeof 100; // 'number'
typeof 'css'; // 'string'
typeof true; // 'boolean'

// 函数类型
typeof function (){}; // 'function'

// 特殊值undefined
typeof undefined; // 'undefined'

// 其它类型全部返回'object'
typeof {}; // 'object'
typeof []; // 'object'
typeof null; // 'object'

#### 2.2.2 `undefine`类型的一个应用


* `undefined` 类型有一个特殊应用:

* 已声明,但尚未初始化(赋值)的变量,它的值就是`undefinec`

* 而`typeof undefined;`是不会报错的,会返回`undefined`

* 所以可以用`typeof`来检测变量是否已声明过

实例

age; // 出错: ReferenceError: age is not defined
typeof age; // 'undefined' 不会报错

// 以下是一种非常稳妥的变量赋值技巧
if (typeof age === 'undefined') {
    var age = 30;
}
console.log(age);

#### 2.2.3 如果正确判断`Array`类型


* 数组与对象数据,都返回`object`对象类型,如何进行区分呢?

* 使用`instanceof`运算符或者数组构造器`Array.isArray()`方法

实例

[] instanceof Array; // true
Array.isArray([]);  // true

#### 2.2.4 如果正确判断`null`类型


* `null`其实应该返回`null`类型才正确, 为什么返回`object`,这是历史遗留问题,已经不可更改了

* 使用以下代码,可以正确的判断一个变量是否有`null`类型

实例

// 可以将n换成除null以外的任何类型的值进行测试,通过排除法确定它的类型
var n = null;
if (!n && typeof(n)!='undefined' && n!=0) {
    console.log('n is null');
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

#### 2.2.5 `null`与`undefined`的区别与联系


* `null`和`undefined`是很多场景下,可认为同义,几乎没有区别

实例

console.log(null == undefined); // true

// 都可以自动转为false
console.log(!null ? true : false);  // true
console.log(!undefined ? true : false); // true

* 正因为如此相似,Google开发的`JavaScript`替代语言`Dart`放弃了`undefined`,只保留了`null`

* 即然如此, 为什么还要有`undefined`呢? (外国也有"既生瑜,何生亮"的事)

* 这主要是由历史原因造成的


* 1995年,`JavaScript`设计者`Brendan Eich(布兰登.艾希)`一开始只设计了`null`表示`无`

* 这个`null`也可像其它语言一样,自动转为`0`,但他觉得这还不够

* `null`在`java`中是一个对象,而`js`有原始类型和对象类型二大类,表示`无`的最好不是`对象`

* 所以这位仁兄设置了一个`undefined`

* 'Brendan Eich'是这样来区分的:

* `null`表示`无`的对象,转为数值时为`0`

* `undefined`表示`无`的原始值, 转为数值时为`NaN`

实例

Number(undefined); // NaN
  100 + undefined; // NaN

* 事实证明这样更混乱,目前`null`和`undefined`基本同义,只有细微差别


##### 2.2.5.1 null 的使用场景


`null`表示**没有对象**, 即这个地方就不应该有值,典型场景:


* 做为函数的参数, 表示该参数不是对象

* 做为对象原型连的终点(原型链后面会学到)


##### 2.2.5.2 undefined 的使用场景


`undefined`表示**缺少值**,即这里应该有一个值,但是未定义,典型场景:


* 变量被`var`声明了,但没有赋值,所以目前变量的值就是`undefined`,正等着初始化

* 调用函数时,应该提供的实际参数而没有提供,该参数值就自动等于`undefined`

* 对象中没有被初始化赋值的属性,该属性值默认就是`undefined`

* 函数没有返回值时(无`return`语句),默认会返回`undefined`

实例

var i;
i // undefined

function f(x){console.log(x)}
f() // undefined

var  o = new Object();
o.p // undefined

var x = f();
x // undefined

---------------------------------------------------------------


### 2.3 布尔值


* 布尔值域只有`true`和`false`二个值,分别表示`真`和`假`


* 下列的运算符会返回布尔类型的值:

* 二元逻辑运算符: `&&`, `||`

* 前置一元素逻辑运算符: `!`

* 相等运算符: `==`, `===`, `!=`, `!==`

* 比较运算符: `>`,`>=`,`<`,`<=`


* 如果在某个位置上应该返回布尔值,那么引擎就是将该处表达式的运算结果自动转为布尔值

* 除了以下6个值之外, 全部转为`true`

* `undefined`

* `null`

* `false`

* `0`

* `NaN`

* `""`/`''` : (空字符串)

* 布尔值主要用于流程控制

实例

if (!'') {console.log('空字符串')} // '空字符串'

### 2.4 分号真的可有可无吗

* `JavaScript`语句是允许省略结尾处的`;`分号的,引擎会自动添加上

* 但是省略这个分号,有时会引发一些匪夷所思的事情,建议最好添加上

* 特别是在代码压缩时,如果没有分号,会保留原格式

* 具体是哪些场景下必须加分号,哪些场景下允许省略,建议看相关教程,此处略过

实例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js脚本的引入方式</title>
<link rel="stylesheet" href="style01.css">
</head>
<body>
<!-- 1.直接在元素的事件方法属性上写js代码 -->
<!-- onclick是click事件对应的方法,this默认指向当前元素对象,可以省略 -->
<h3 id="tips" onclick="alert(this.id)">JavaScript很好玩的</h3>
<h3 id="tips" onclick="alert(id)">JavaScript很好玩的</h3>


<!-- 在表单中,事件方法属性可以直接使用表单元素的name属性访问同一个form标签内的元素 -->
<form action="">
<input type="text" name="site" value="php中文网">
<button type="button" onclick="alert(site.value)">显示站点</button>
</form>

<!-- 更多情形下, 事件方法属性的值是一个JS函数(函数我们后面会专门讨论) -->
<form action="">
<input type="text" name="username" placeholder="用户名">
<button type="button" onclick="check(username)">验证</button>
</form>
<!-- 2.将js脚本写script标签中,仅限当前页面使用 -->
<script>
function check(username) {
// js中的注释写法: 单行
/*
            该函数用来验证用户名是否为空
            */
if (username.value.length === 0) {
alert('用户名空空如也');
} else {
alert('验证通过');
}
}
</script>
<div id="ball"></div>
</body>
</html>
运行实例 »

点击 "运行实例" 按钮查看在线实例                                                                                                                                       










声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议