JavaScript中的变量
- 变量的声明和赋值
- 变量的命名
- 变量的作用域
- 数据类型
- 不同进制之间的转换
- 二进制和十进制的相互转换
- 二进制和八进制的相互转换
- JavaScript提供的进制转换方法
- toString方法
- parseInt方法
变量的声明和赋值
变量在使用之前需要进行声明,声明变量使用var关键字:
// 声明一个message变量// var是关键字// message是变量名称var message;
声明变量后就可以进行赋值和使用了:
// 声明了变量var message;// 对变量进行赋值message = \"Hello World!\";// 使用变量alert(message);
也可以在声明变量的同时对变量进行赋值,这个过程叫做变量的初始化:
// 变量的初始化var message = \"Hello World!\";
ECMAScript中的变量是松散的,所谓松散类型也就是说可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。
因为变量可以保存任意类型的数据,所以可以在程序中给变量赋予不同类型的值:
// 初始化为字符串var message = \"Hello World!\";// 赋予number类型的值message = 12;
注意:
- 当变量还没有初始化的时候,会默认保存为 undefined
- 通常不建议去修改变量所保存的值的类型
可以使用一条语句同时声明多个变量,每个变量之间使用逗号隔开:
var message = \"hi\",found = false,age = 29;
变量的命名
变量的名称也叫作标识符,所谓标识符就是指在JavaScript中定义的符号(如:变量名、函数名等)。定义标识符的时候需要遵守下面的规则:
- 标识符可以由任意的大小写字母、数字、下划线(_)和美元符($)组成
- 标识符不能以数字开头
- 不能使用JavaScript中定义的保留字和关键字
JavaScript中的关键字
JavaScript中的保留字
标识符除了需要遵守上面的规则外,还应该遵循一些规范:
- 标识符的名字应该是见名思意的
- 当单词超过两个的时候,应该遵循下面的规范驼峰命名:className
- 下划线命名:class_name
规则和规范:
- 标识符的命名规则是必须要遵守的,否则会报错
- 规范是可以不遵守的,只是为了代码规范和可读性,建议按照规范去做
在JavaScript中,标识符的命名是区分大小写的:
// 声明了一个变量 agevar age = 12;// 声明了另外一个变量 Agevar Age = 13;
注意:虽然字母的大小写可以区分变量,但是强烈不建议这样去命名两个变量
变量的作用域
变量的作用域就是变量能够起作用的范围,比如下面的一段代码:
function test () {// 在函数中声明了一个变量var message = \"Hello\";// 在函数中调用messageconsole.log(message);}// 调用函数 控制台输出 Hellotest();// 在函数外部调用message,程序报错console.log(message);
上面的案例中,使用var在函数中定义了一个局部变量message,在函数外部访问该变量就会报错。
如果将函数中变量message前面的var关键字去掉,这个时候就相当于定义了一个全局变量,此时在函数外部就可以访问了:
function test () {// 在函数中声明了一个变量message = \"Hello\";// 在函数中调用messageconsole.log(message);}// 调用函数 控制台输出 Hellotest();// 在函数外部调用message,控制台输出 Helloconsole.log(message);
注意:虽然省略var可以定义全局变量,但是不推荐这么做:
- 在局部作用域中定义全局变量很难维护
- 导致不必要的混乱
- 在严格模式下会导致抛出ReferenceError错误。
数据类型
JavaScript提供了以下的数据类型:
- 基本数据类型number:数字类型,包括浮点数和整数
- boolean:布尔类型
- undefined:如果变量声明的时候没有初始化,则系统默认赋值为undefined
- string:字符串类型
- null:null也是一种值,但逻辑含义是没有值
- object:对象
JavaScript提供了 typeof 关键字来获取变量或者常量的类型。
// 定义了一个整数var num = 12;console.log(typeof num); // number// 定义了一个小数var num2 = 12.12;console.log(typeof num2); // number// 定义了一个布尔类型var bool = true;console.log(typeof bool); // boolean// 定义了一个字符串var str = \"str\";console.log(typeof str); // string// 只声明未赋值一个变量var unde;console.log(typeof unde); // undefined// 定义nullvar n = null;console.log(typeof n); // object
不同进制之间的转换
进制是我们数数时候的一种习惯,我们习惯上使用的是十进制(逢十进一)。但对于计算机来说,它使用的是二进制(逢二进一),那是因为组成计算机的元件一般只有两种状态:0和1。但是二进制对于程序员来说阅读不是很方便、也不方便书写,所以有了八进制和十六进制。
- 十进制: 0 ~ 9
- 八进制: 0 ~ 8
- 十六进制: 0 ~ 9、A ~ F(表示 10 ~ 15)
- 二进制: 0 和 1
这些进制之间是可以进行相互转换。
二进制和十进制的相互转换
十进制转换成二进制采用的是 除二取余 的方法:将一个十进制的数除以二,得到的商再除以二,以此类推直到商等于1或者0为止,然后倒取得到的余数即为二进制数的结果。比如将十进制的52转换成二进制的过程为:
所以转换后的结果为:110100。
二进制转换为十进制采用的是 2的n次方(n是对应的二进制从0开始的位置)乘以对应位置的数值,然后将这些数值相加 就得到对应的二进制的十进制数的表示,比如:将 110100 转换为十进制:
注意: 十进制和八进制、十六进制的相互转换可以参照与二进制的转换方式,只不过将对应的2替换成8和16。
二进制和八进制的相互转换
一般情况下我们会直接使用二进制转换为八进制,转换规则是: 从右往左数,每三位一组,不足三位的用0补齐,将每一组数转成十进制数,这些数组合起来就是八进制数。 比如:将 110100 转换为八进制:
八进制转二进制则是与上面相反的过程,即:将八进制的每一位使用十进制转换成二进制数:
注意: 二进制和十六进制的相互转换和二进制与八进制的转换类似,只不过将三位一组改成四位一组。
JavaScript提供的进制转换方法
JavaScript也提供了一些进制转换的方法。
toString方法
var num1 = 072; // 八进制数,相对于十进制的58var num2 = 0xAF; // 十六进制,相当于十进制的175console.log(num1.toString(10)); // 转换成十进制的字符串输出 58console.log(num2.toString(2)); // 转换成二进制的字符串输出 10101111
toString中的参数是指定需要转换的进制数。
parseInt方法
var num1 = \"072\"; // 八进制数,相对于十进制的58var num2 = \"0xAF\"; // 十六进制,相当于十进制的175console.log(parseInt(num1, 8)); // 58console.log(parseInt(num2, 16)); // 175
第一个参数是数字的字符串格式,第二个是指当前传入的字符串所表示的数字的进制数,返回的是十进制的整数。