四、变量
与字面量相对,字母量是固定值,不变的。变量里面的值是可以发生变化的。
变量(Variables),本身相当于一个容器,可以存储任意类型的数据。数字、字符串、布尔值、数组、变量、函数等等,都是数据。
限制:变量内部只能放一种数据,放入新数据,旧的就会被舍弃。
1、体验变量
举例来看一个实际变量的产生和引用的过程。
//定义 var abc; //赋值 abc = 12; //引用输出变量 console.log(abc);

使用变量时,使用的是里面的数据而不是变量的名字。
变量内部存储的数据并不是一成不变,可以发生变化。
//定义
var abc;
//赋值
abc = 12;
//重新赋值
abc = "haha";
//引用输出变量
console.log(abc);

2、变量的声明
变量的声明也叫作变量的定义,定义一个新的变量,表示可以往里面存储数据了。
变量必须先声明(关键字var),才能使用。试图访问一个没有声明的变量,将抛出ReferenceError错误。
变量如果不声明,不能直接使用。
声明需要用到个关键字,var,后面必须跟一个空格,空格之后才是自定义的变量的名称。
//声明必须有var 关键字
var a;
a = 12;
console.log(a);
console.log(b);

说明:变量必须先定义,才能使用,如果没有定义就使用,会抛出一个引用错误referenceError。变量不存在未定义。
变量名定义时需要遵循一些标识符命名规范。
变量的名称是标识符(identifiers),任何标识符的命名都需要遵守一定的规则。
第一个字符必须是一个字母、下划线(_)或一个美元符号($);
其他字符可以是字母、下划线、美元符号或数字。
因为JavaScript语言是区分大小写的,这里所指的字母可以是(大写的)“A”到字母“Z”和(小写的)“a”到“z”。并且不能是JavaScript的关键字和保留字。
关键字,就是有特定用途的小词语。关键字后面一定要有空格隔开。
保留字没有任何特定的用途,但是有可能在将来被用作关键字。
关键字:
break do instanceof typeof case else new var catch finally return void continue for switch while debugger* function this with default if throw delete in try
保留字:
abstract enum int short boolean export interface static byte extends long super char final native class
synchronized float package throws const goto private transient debugger implements protected volatile double
import public
//定义一些变量,遵循标识符命名规范
var a;
var _;
var $;
//var 5a;
var a123;
var O_O;
var TAT;
var _$A$_;
//var a*;
//var $%^;
//var for;
//var double;
3、变量的赋值
用 var 声明的未赋初值的变量,值会被设定为undefined,表示我的变量内部是未定义的,变量后面可以用来保存任何值。
//声明一个变量
var a;
console.log(a);

赋值需要用到一个符号:等号=,表示给变量赋值。
等号表示赋值,会将=右边的值,赋给=左边的变量。
a = 3;
赋值需要用到一个符号:等号=,表示给变量赋值。
等号表示赋值,会将=右边的值,赋给=左边的变量。
变量赋值时,=左边的变量值改变,=右边的值是不变的。左变右不变。右边的值可以是任意类型的数据,甚至是变量。
//变量赋值 左变右不变
var a = 3;
var b;
b = a + 2;
var c;
c = a;
a = c + 5;
console.log(a);//8
console.log(b);//5
console.log(c);//3
同时定义多个变量:变量只需要var一次,今后更改变量的值,无需重复var。多个变量之间用逗号隔开,最后一个变量后面加分号。
//定义多个变量
var a,b,c;
实际工作中,一般讲变量的定义和赋初值写在一起
//定义与赋初值一起写
var d = 3;
console.log(d);
4、变量声明提升
JavaScript 变量的另一特别之处是,你可以引用稍后声明的变量,而不会引发异常。这一概念称为变量声明提升(hoisting);JavaScript 变量感觉上是被“举起”或提升到了所有函数和语句之前。然而提升后的变量将返回 undefined 值,所以即使在使用或引用某个变量之后存在声明和初始化操作,仍将得到 undefined 值。
指的就是我们可以先引用变量,后定义,不会报错。
注意:变量提升,只提升定义(声明),不提升赋值。相当于引用的时候只定义,没赋值,输出undefined。
//先使用
console.log(a);
//再定义
var a=123;

//相当于
var a;
console.log(a);
a = 123;
五、数据类型
JavaScript中的值,无论是字面量还是变量,都有明确的类型。
简单数据类型5种
Number 数字类型
String 字符串类型
undefined undefined类型,变量未定义时的值,这个值自己是一种类型
Boolean 布尔类型,仅有两个值true 和 false,
null null类型,这个值自己是一种类型
复杂数据类型
object
数字类型:数字字面量、存储数字的变量。数据类型不再区分整数、浮点数、特殊值。
字符串类型:所有的字符串都是这个类型。
如何检测数据类型。
1、数据类型检测
可以使用一个叫做typeof的方法进行检测。
将要检测的数据放在typeof的小括号内即可检测类型。
console.log(typeof (123));
typeof作为一个关键字,可以不写小括号,后面跟一个空格,再写检测的数据,也可以进行检测

2、变量的数据类型
JavaScript的数据类型,是一种动态的数据类型。体现在变量上,变量的数据类型是随着内部存储数据的类型变化而变化的。
变量的数据类型,就是它内部存储的数据的数据类型。
var a = 2; console.log(typeof a);

var a = 2;
console.log(a);
a = "haha";
console.log(a);
a = true;
console.log(typeof a);

数据类型之间也可以进行相互转化。
1、数字转字符串
加号的作用:
在涉及加法运算符(+)的数字和字符串表达式中,JavaScript 会把数字值转换为字符串。
在涉及其它运算符时,JavaScript语言不会把数字变为字符。
console.log(1 + 2);
console.log(1 + "2");
console.log("23" + "2");

可以将一个数字加一个空的字符串。
console.log(typeof(12 + ""))

2、字符串转数字
学习两个转换的方法:转整数、转浮点数。
有3 个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。第一个函数,
即转型函数Number()可以用于任何数据类型,而后两个函数则专门用于把字符串转换成数值。
parseInt方法:
①可以对数字进行取整运算。
②将其他类型的转为数字类型。
console.log(parseInt(123.12));

注意进制问题:
另外,由于ECMAScript 3 和 5存在着分歧,调用 parseInt()函数时最好总是带上进制(radix) 参数,这个参数用于指定使用哪一种数制。如果指定了进制,那字符串前可以不带前缀“0”、“0o”、“0x”。
如果不指定第二个参数,ECMAScript 5默认为十进制。
var num1 = parseInt("10", 2); //2 (按二进制解析)
var num2 = parseInt("10", 8); //8 (按八进制解析)
var num3 = parseInt("10", 10); //10 (按十进制解析)
var num4 = parseInt("10", 16); //16 (按十六进制解析)
console.log(parseInt("189"));
console.log(parseInt("010"));
console.log(parseInt("010",8));
console.log(parseInt("10",8));
看一下不同的字符串转成的数字:
console.log(parseInt("12"));
console.log(parseInt("12.23"));
console.log(parseInt("12个人"));
console.log(parseInt("有12个人"));
console.log(parseInt("Infinity"));
console.log(parseInt("5.2e10"));

parseFloat:将字符串转为浮点数
console.log(parseFloat("12.23"));
console.log(parseFloat("12.23.34"));
console.log(parseFloat("12.23百分比"));
console.log(parseFloat("涨了12.23百分比"));

实例:想看一下用户通过对话框输入的数据是什么类型。字符串类型。
如果想参与数学运算,得转成数字。
//让用户输入年龄,看距离100岁还有多少年
var a = parseInt(prompt("你今年几岁了?"));
//计算,用100-你的年龄
var b = 100 - a;
console.log("距离100岁还有"+b+"年");
七、数学运算符
1、数学运算符
算术运算符使用数值(字面量或者变量)作为操作数并返回一个数值。标准的算术运算符就是加、减、乘、除、求余。
+ 加法运算符.
- 减法运算符.
/ 除法运算符.
* 乘法运算符.
% 取模运算符.取余运算。
除法里面如果是整除,不会出现余数,如果不能整除,会出现余数。
取余方法就是除法里面,得到不是商,而是那个余数。
被除数 / 除数 = 商 (剩余数)
var a = 20;
var b = a % 6;
console.log(b);

一个数取6的余数,结果只有6种情况,0-5.
运算顺序:先算乘除取余、再算加减,如果有小括号,先算小括号。
2、Math对象
Math对象实际上是一个js内置好的强大的数学对象,里面包含很多属性和方法,帮我们做一些数学运算。
Math.random(); 返回大于等于0小于1的一个随机数
Math.pow(num,power); 返回num的power次幂
Math.sqrt(num); 返回num的平方根
Math.PI 返回π的值
random本身是随机的意思,后面直接写小括号,内部不用写任何数字,没有参数。
console.log(Math.random());
求一个数的多少次方
console.log(Math.pow(2,8));

给一个数开平方,求平方根。
console.log(Math.sqrt(2));
console.log(Math.sqrt(3));
console.log(Math.sqrt(5));

圆周率是math对象里面的一个属性,后面不需要加括号。直接引用。
console.log(Math.PI);
1)计算下列算式,并将结果输出:

2)住房公积金缴纳金额与工资两者的关系是:
住房公积金 = 税前工资 * 0.1 * 2 ;
编写程序,让用户输入税前工资,弹出对应的公积金数额。
3) 用JS计算下列算式,并将结果在弹出:

4) 编写程序,提示用户输入圆锥的底面半径和高,然后弹出它的体积,计算圆锥体积的公式是:
体积V=1/3π半径2*高
5) 如果今天是星期二,那么1000天后是星期几?用户输入一个天数,计算这个天数后是星期几。
6) 用户输入一个三位数,弹出各个数位的和。
比如:
用户输入155,就弹出11
用户输入316,就弹出10
用户输入989,就弹出26
用户输入678,就弹出21