重新学习,JavaScript(一)

var

var 是变量声明命令(ES6增加了let和const)

var a; // 通知解释引擎,要创建变量a
var a = 1; // 声明变量 a 并赋值为 1
var a = 1 + 1; // 声明变量 a 并赋值为表达式 1+1

只声明变量不赋值

var a;
a; // undefined

声明变量并赋值

var a;
a = 1;
a; // 1

var a = 1;
a; // 1

不声明变量直接使用

a; // ReferenceError: a is not defined

变量提升

javascript 引擎的工作方式为先解析代码,获取所有被声明的变量,再一行行运行。
结果,所有变量声明语句会被提升到代码的顶部,这就叫变量提升。

console.log(a); // undefined
var a = 1;
// 因为存在变量提升,所以不会执行失败,相当于以下代码
var a;
console.log(a); // undefined
a = 1;

ES6 let 和 const

let

ES6 新增了 let 命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

{
  let a = 1;
  var b = 2;
}

a // ReferenceError: a is not defined.
b // 2

let 不存在变量提升问题

// var 的情况
console.log(a); // 输出:undefined
var a = 1;

// let 的情况
console.log(a); // 报错:ReferenceError
let a = 1;

let 不允许同一作用域下重复声明

// var 的情况
// 报错
function func() {
  let a = 10;
  var a = 1;
}
// let 的情况
// 报错
function func() {
  let a = 10;
  let a = 1;
}

// 不报错
function func() {
	let a = 10;
  	if (true) {
    	let a = 1;
  	}
}
func();

// 不报错
function func(a) {
  	if (true) {
    	let a = 1;
  	}
}
func();

const

const 声明一个只读的常量。一旦声明,常量的值就不能改变。
constlet 一样有作用域,需要注意的是 const 声明时需要赋值,不赋值会报错。

const 本质为,变量指向的那个内存地址所保存的数据不得改动。

const a = {};
a.b = 1;
a.b // 1

// 重新指向另一个对象报错
a = {}; // TypeError: "a" is read-only

数据类型

JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6新增了第七种 symbol)

  • 数值(number):整数和小数(比如 13.14
  • 字符串(string):文本(比如 Hello World)。
  • 布尔值(boolean):表示真伪的两个特殊值,即 true(真)和 false(假)
  • undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
  • null:表示空值,即此处的值为空。
  • 对象(object):各种值组成的集合。

通常,数值字符串布尔值这三种类型,合称为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了。对象则称为合成类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。至于 undefinednull ,一般将它们看成两个特殊值

对象是最复杂的数据类型,又可以分成三个子类型。

  • 狭义的对象(object)
  • 数组(array)
  • 函数(function)

typeof

typeof 运算符可以返回一个值的数据类型。

typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"

function f() {}
typeof f
// "function"

typeof undefined
// "undefined"

typeof window // "object"
typeof {} // "object"
typeof [] // "object"

typeof null // "object"

instanceof 运算符可以区分数组和对象

var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true

参考资料
阮一峰: JavaScript 教程
阮一峰: ECMAScript 6 入门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值