基本概念

基本概念

语法

1⃣️ 区分大小写

变量名 test 和变量名 Test 分别表示两个不同的变量

2⃣️ 标识符

所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符可以是按照下列格式规则 组合起来的一或多个字符:

 第一个字符必须是一个字母、下划线(_)或一个美元符号($);

 其他字符可以是字母、下划线、美元符号或数字。

3⃣️ 注释

// 单行注释

/*
这是一个多行 (块级)注释
* * */

4⃣️ 严格模式

"use strict"

5⃣️ 语句

ECMAScript 中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾

注意问题

1.在一对 script 的标签中有错误的 js 代码,那么错误的代码后面的 js 代码不会被执行

2.如果第一对的 script 标签中有错误,不会影响后面的 script 标签中的 js 代码执行

3.script 的标签中可以 写 type=“text/javascript" 或者写 language="javascript"是标准写法 ,但是在 html5 中可以省略

4.script 标签可以在页面中出现多对

5.script 标签一般都是放在 body 里的后面的,可以提高页面加载速率

6.如果 script 标签是引入外部的 js 文件,则这对 js 标签里不要写任何的 js 标签,如果要写则重新写一对 script 标签

关键字和保留字

ECMA-262 描述了一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或 者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。

break case catch continue debugger* default delete

do else finally for function if in

instanceof new return switch this throw try

typeof var void while with

ECMA-262 还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定 的用途,但它们有可能在将来被用作关键字。

abstract boolean byte char class const debugger double

enum export extends final float goto implements import

int interface long native package private protected public

short static super synchronized throws transient volatile

变量

ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一
个用于保存任意值的命名占位符。有 3 个关键字可以声明变量:var、const 和 let。其中,var 在
ECMAScript 的所有版本中都可以使用,而 const 和 let 只能在 ECMAScript 6 及更晚的版本中使用。

var 关键字

多次声明了同一个变量;javascript 会对后续的声明视而不见(不过,它会执行后续声明中的变量初始化)

var i = 10
var i
alert(i) //10

var 操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说, 如果在函数中使用 var 定义一个变量,那么这个变量在函数退出后就会被销毁

function test() {
   
  var message = "hi" // 局部变量
}
test()

alert(message) // 错误!

省略 var 操作符可以定义全局变量,但这也不是我们推荐的做法。因为在局 部作用域中定义的全局变量很难维护,而且如果有意地忽略了 var 操作符,也会由于 相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式 下会导致抛出 ReferenceError 错误。

function test() {
   
  message = "hi" // 全局变量
}
test()
alert(message) // "hi"

可以使用一条语句定义多个变量,只要像下面这样把每个变量(初始化或不初始化均可)用逗号分 隔开即可:

var message = "hi",
  found = false,
  age = 29

使用 var 声明的变量会自动提升到函数作用域顶部:

function foo() {
   
  console.log(age)
  var age = 26
}
foo() // undefined

反复多次使用 var 声明同一个变量也没有问题:

function foo() {
   
  var age = 16
  var age = 26
  var age = 36
  console.log(age)
}
foo() // 36

let 声明

let 声明的范围是块作用域,而 var 声明的范围是函数作用域

let 与 var 的另一个重要的区别,就是 let 声明的变量不会在作用域中被提升。

// name 会被提升
console.log(name) // undefined
var name = "Matt"
// age 不会被提升
console.log(age) // ReferenceError:age 没有定义
let age = 26

与 var 关键字不同,使用 let 在全局作用域中声明的变量不会成为 window 对象的属性

var name = "Matt"
console.log(window.name) // 'Matt'
let age = 26
console.log(window.age) // undefined

在 let 出现之前,for 循环定义的迭代变量会渗透到循环体外部

for (var i = 0; i < 5; ++i) {
   
  // 循环逻辑
}
console.log(i) // 5
for (let i = 0; i < 5; ++i) {
   
  // 循环逻辑
}
console.log(i) // ReferenceError: i
for (var i = 0; i < 5; ++i) {
   
  setTimeout(() => console.log(i), 0)
}
// 你可能以为会输出 0、1、2、3、4
// 实际上会输出 5、5、5、5、5
for (let i = 0; i < 5; ++i) {
   
  setTimeout(() => console.log(i), 0)
}
// 会输出 0、1、2、3、4

const 声明

const 的行为与 let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且
尝试修改 const 声明的变量会导致运行时错误。

数据类型

typeof 操作符

鉴于 ECMAScript 是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof 就 是负责提供这方面信息的操作符。

对一个值使用 typeof 操作符可能返回下列某个字符串:

 "undefined"表示值未定义;
 "boolean"表示值为布尔值;
 "string"表示值为字符串;
 "number"表示值为数值;
 "object"表示值为对象(而不是函数)或 null;
 "function"表示值为函数;
 "symbol"表示值为符号。

var message = "some string"
alert(typeof message) // "string"
alert(typeof message) // "string"
alert(typeof 95) // "number"

typeof 操作符的操作数可以是变量(message),也可以是数值字面量。

注意,typeof 是一个操作符而不是函数,因此例子中的圆括号尽管可以使用,但不是必需的。


Undefined 类型

Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined

var message
alert(message == undefined) //true

使用 undefined 值显式初始化变量 message。但我们没有必要这么做,因为未经初始化的值默认就会取得 undefined 值。

var message 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值