变量的名字就像人的名字一样,不能乱起。
我们能从名字中读出很多含义,是因为我们的语言常识
同样,变量也有一套类似的常识标准,代表了各种含义,如下:
字符型:前缀 s 类型String 浮点数:前缀 f 类型Float
数字型:前缀 n 类型Number 函数:前缀 fn 类型Function
布尔型:前缀 b 类型Boolean 整数:前缀 i 类型 Integer
未定义型:前缀 u 类型Undefined 正则表达式:前缀 re 类型RegExp
对象型:前缀 o 类型Object
数组型:前缀 a 类型Array
前缀就能表示出这个变量的类型
开头必须为字母或者$或者_ typeof不能做为变量名
关键字和保留字不能用做变量名。
六、算术、赋值、关系运算符
算术运算符:+加法 -减法 *乘法 /除法 %取余
var a=10,b=3;
a+b=13;
a-b=7;
a*b=30;
a/b=3.333;
a%b=1;
目测,跟数学中的运算符是一样的。但是:
var a=10,b="3";
a+b=103;
(此处的103不是数值而是字符;"="起到了隐式转换的作用,将a从数值型转换为字符型)
(+两边只要有一方是字符,+的功能就变成了字符串链接)
a-b=7;a*b=30;a/b=3.333;a%b=1;
(在(-,*,/,%)这些运算符时,"="也会起到隐式转换的作用
将字符转换为数值,"="就是正常的运算作用)
总结: +号,有两层意思,第一层算数之间的加法;第二层字符串的连接
执行过程中,先检测加号两边的数据类型,如果发现字符型,那就先生效字符的连接
没有定义 not defined,表示没有声明这个变量;
未定义 undefined,表示声明了变量但是没有赋值。
两个含义不一样。
赋值运算符:= += -+ *= /+ %=
+=:
var a=10;
a += 10;
console.log(a)
-=:
var a=10;
a -= 5;
console.log(a)
自增自减运算:++ --
a++表示在a原有的基础上增加1;a--表示在a原有的基础上减小1;
var a = 1;
alret(a);
那么,++a和--a呢?和上面的道理是同样的。
但是,区别在哪呢?看下面。
var b = 1;
alert(b++);在这一步 显示出来的按道理应该是2,但是显示出来的是1;
alert(b);在这一步,再输出一次 b ,才会显示出来 2。
var c = 1;
alert(++c);在这一步直接就显示出来2
区别一目了然了。
原因在:++c属于前自增;b++属于后自增;
前自增与后自增有本质的区别,他们相同点都是为本身加了1,不同点是
前自增是先加1,再使用操作数。
后自增是先使用操作数,再加1.
前自减和后自减道理同上。
关系运算符:< <= > >= == != ===
var a=10;
var b=20;
console.log(a>b)//输出的结果就是false
console.log(a<b)//输出的结果就是true
console.log(a=b)//输出的结果就是20,因为"="是赋值的意思,所以a被赋值了。
console.log(a == b)//现在就正常了,输出的结果是false。"=="是等于的意思。
console.log(a != b)//输出的结果是,true。
var a="10"
var b=10;
conlose.log(a == b)//输出的结果是true,因为都是10,虽然是不同类型的
conlose.log(a === b)//输出的结果是false;
"=="与"==="的不同点是:
"==" 是只比较数值是否相同。
"==="也是比较数值是否相同,但是多了一个步骤,比较是否为相同类型.
var a="20";
var b="19";
conlose.log(a>b)
//输出的结果是true,此处并没有发生类型转换,只是字符有属于它们的一套比较方式。
var a="20";
var b="190";
conlose.log(a>b)
//输出的结果是true,这里用到了 字符的逐位比较,得到结果,停止比较。 因为2>1。
var a="a";//前面的a为变量,后面的a为赋值。
var b="b";
conlose.log(a>b)
//输出的结果是false,字母的比较,用的是ASCII编码格式进行比较
逻辑运算符:||(或) &&(与) !(非)
||(或):只要有一边为真,就为真。两边都为假,才为假。
conlose.log(true||flase);//输出的结果是true
&&(与):只要有一边为假,就为假。两边都为真,才为真。
conlose.log(true&&false);//输出的结果是假。
!(非):相反。非真为假,非假为真。
var a=10;
var b=20;
var c=30;
var d=40;
conlose.log(a<b||c>d);//输出的结果是真
conlose.log(a<b&&c>d);//输出的结果是假
七、数据类型的转换
数值转字符:
var a=10;
conlose.log(a);//输出的结果是10;
conlose.log(typeof a);输出的结果是 number
conlose.log(a.toString()); 输出的结果是10;不过这次是字符
conlose.log(typeof a.toString()); 输出的结果是string
字符转数值:
var a="10";
conlose.log(parseInt(a));//输出的结果是10,这里是数值
conlose.log(typeof parseInt(a));//输出的结果是 number;
var b="123.456"
conlose.log(parseInt(a));//输出的结果是123,parseInt转换为整数
conlose.log(pareFloat(a));//输出的结果是123.456,parseFloat转换为浮点型。
var c="123.4a56"
conlose.log(parseInt(c));//输出的结果是123
parseInt从左向右检测到第一个非数值的字符(包括".")停止,返回前面的数字
conlose.log(parseFloat(c));//输出的结果是123.4
parseFloat从左向右检测到第一个非数值的字符(不包括".")停止,返回前面的数字
var d="hello world"
conlose.log(d);//输出的结果是hello world
conlose.log(parseInt(d));//输出的结果是 NaN
conlose.log(parseFloat(d));//输出的结果是 NaN
如果要转换的字符串的第一个字符就不是数字,那么会得到NaN
强制数据类型转换:
数字转字符:
num.toString();
字符转数字:
parseInt从左向右检测到第一个非数值的字符(包括".")停止,返回前面的数字
parseFloat从左向右检测到第一个非数值的字符(不包括".")停止,返回前面的数字
console.log( Number());强制转换为数值,转换规则更严格,字符必须完全是数字
隐式数据类型转换:算术运算符中
四舍五入:Math.round
var num="1234.56789"
conlose.log(Math.round(num));//输出的结果是1235;
保留小数:toFixed
var num=123.456789;
conlose.log(num.toFixed(2));//输出的结果是123.46
八、NaN的概念和应用
NaN 全称 not a number , 它不是一个数值,但是它占着数值型的类型。
它是 特殊的,不是一个数字的数值型, 自身budengyu自身。
conlose.log(NaN==NaN);//输出的结果是 flase;
非法的数值运算,会得到NaN
应用:当你做一个类型转换的时候,你并不确定它是否是NaN。
isNaN();
is not a number;
是不是 不是 一个数字
conlose.log(isNaN(NaN));//输出的结果是true
conlose.log(isNaN(123));//输出的结果是false
conlose.log(isNaN(parseInt("123")));
//如果输出的结果是false,那么说明parseInt转换的字符123,能成功转换为数值。
如果输出的结果是true,那么说明parseInt转换的字符123,没有成功转换为数值。