编程中的程序其本质就是处理数据的过程,当输入指令时,就可以输出相应的内容,在输入和输出之间就是处理数据的过程。处理的数据可能有多种,多个,这时就需要使用不同的名字来存储、区分和提取不同的数据,这个名字就是编程中所叫的变量,简单的来说,可以把变量理解为一个容器,而容器的主要功能就是存储和获取。
JavaScript是弱类型语言,与之相对应的是强类型语言,所谓强弱之分就是变量保存数据类型的区分,弱类型语言可以保存任意数据类型,而强类型语言必须在声明前指定变量的类型,被规定数据类型的变量只能保存对应的数据格式,常见的强类型语言有:C C++ Java,它们声明变量的同时必须同时声明其类型,在存储数据时必须存储对应的数据类型
float f; // 声明一个浮点类型的变量
int i; // 声明一个整数类型的变量
弱类型的JavaScript在声明变量时无需指定任何数据类型,也就是说每个变量仅仅保存数据值的一个占位符而已,可以被用来存储任意数据类型的值,在未对变量赋值之前变量会被系统默认为undefined(未定义的)
// 语法: var 变量名;
var zhishunet;
// 我们也可以使用逗号(,)一次性定义多个变量
var zhishunet, zhishuseo, zhishu
// 对于未声明的变量赋值时,变量就成为全局变量了
<script>
zhishunet = "www.zhishunet.com"
alert(zhishunet); // 输出 www.zhishunet.com
</script>
// 变量相当于容器,它的主要功能就是存储和读取,在JS中使用等号 “=” 运算符为变量赋值
// 语法: 变量名 = 数据值;
zhishunet = "www.zhishunet.com"
// 还有就是在声明变量的同时为变量赋值,将声明和赋值步骤合并为一行
// 语法: var 变量名 = 数据值;
var zhishunet = "www.zhishunet.com"
// 当多次对同一变量赋值时,相当于对该变量德的值进行重写
var zhishu = "www.zhishunet.com"
document.write(zhishu);
zhishu = "www.zhishunet.cn"
document.write(zhishu);
// 变量提升又称为声明提前 举个例子:
var zhishu = "zhishunet"
var zhishu = "zhishuseo"
// 上面的例子就是在一个脚本中两次声明变量,但是js中所有全局变量的声明都会提升到脚本执行之前,而赋值操作会保留在原位置,上面代码解析步骤为:
var zhishu;
zhishu = "zhishuent";
zhishu = "zhishuseo";
全局变量和局部变量对应的两个范围分别时全局作用域和局部作用域,一个js文件或者HTML文件就相当于一个全局作用域,在全局作用域下可以包含多个小的区域,这些小区域就可以称作局部作用域,在全局作用域喜爱声明的变量就成为全局变量,在局部作用域下声明的变量就是局部变量,一般我们用函数声明布局作用域。全局作用域能够在任意位置使用,局部作用域仅能够在局部区域使用
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>知数SEO_专注搜索引擎优化和品牌推广</title>
</head>
<body>
<script>
var url = "www.zhishunet.com";
function demo(){
var zhishunet = "www.zhishuseo.cn"
document.write('<h2>',url,'</h2>');
document.write('<h2>',zhishunet,'</h2>');
}
demo();
document.write('<h2>',url,'</h2>');
document.write('<h2>',zhishunet,'</h2>');
</script>
</body>
</html>
函数使用过后局部变量会自动销毁,js提供了一种内存管理机制,也称为垃圾回收机制?
1、变量其实就是标识符的一种,其命名规则与标识符保持一致,可以简单的理解为:
数字、字母、下划线、美元符,首字不能为数字
2、js区分大小写,可以使用驼峰命名法
大驼峰:GetNameByID
小驼峰:getNameByID (推荐)
ES6中有一种新的局部变量的声明方式,关键字为let,这种新方法的出现是为了让var的功能更具有专一性和单一性,让var专一的去声明全局变量
// 语法:let 变量名
let zhishunet;
// let 和 var 的语法格式相同,但let关键字实现了功能的专一性和单一性,它为局部变量而生,但是在全局作用域内依然可以使用(坑)
function demo(){
let url = "www.zhishunet.com";
}
// 区块作用域使用方法是用大括号{}为局部作用域定界,let和区块作用域结合可增强代码的可读性和维护性
{
let url = "www.zhishunet.com";
}
alert(url); // 没输出 因为是局部变量
// 1、、没有变量提升
// 2、不能重复声明
// 使用var声明过的变量不能再次使用let声明,使用let声明过的变量也不能再次使用var或let声明
关键字 | var | let |
---|---|---|
作用域 | 全局或局部作用域 | 局部作用域 |
是否可以重复声明 | 可以 | 不可以 |
是否可以重复赋值 | 可以 | 可以 |
是否有变量提升 | 可以 | 不可以 |
?
常量与变量相对应,常量是一旦定义就不会改变的数据,在项目开发中我们常见的常量名有网站域名,标题以及数学中的圆周率等等,这些就是一旦定义就不希望改变的数据,在ES6之前我们用var 加变量名大写的方式定义常量,ES6新增了const关键字用来声明常量,与var不同 const声明常量时必须进行初始化赋值,否则会报错
// 注意:常量一旦被赋值就不能被重新赋值,一旦定义则无法修改
const SITE = "www.zhishunet.com";
document.write('<h2>',SITE,'</h2>');
// const可以在局部作用域中声明,可以成为局部变量,局部变量不能在局部作用域之外使用
// 常量没有变量提升效果、不能被重复声明、不能被重新赋值、
关键字 | const |
---|---|
作用域 | 全局或局部作用域 |
是否可以重复声明 | 同一作用域下不能 |
是否可以重复赋值 | 不能 |
是否有变量提升 | 不能 |
在ES6以前,变量只能被单独赋值,批量赋值的方式无法实现,在ES6中允许按照一定模式从数组和对象中提取值来对变量进行赋值,成为解构(Destructuring)
// 数组和对象都能在单个变量中存储多个数据值,如
[1,2,3]; // 包含三个元素的数组
// ES6 可以这样赋值
var [a,b,c] = [1,2,3];
// 之前的写法
var a = 1;
var b = 2;
var c = 3;
// 除了var关键字之外,let const关键字同样适用于解构