数据类型及转换
数据类型分两种:基本数据类型 (只有一个值) 和 引用数据类型(可含多个值)
基本数据类型有五种 :数字 字符串 布尔值 未定义值和空值
引用数据类型有两种: 数组 和 对象
基本数据类型
数字:是最基本的数据类型,也就是数学中的数字 如10 -10 3.14 ,在JavaScript中数字不区分"整型"和 "浮点型" 的
字符串 : 一定要加引号(单引号或双引号都可以),单引号括起来的字符串可以包含双引号,双引号括起来的字符串可以包含单引号,
总之单引号括起来的字符串中,不能含有单引号,反过来 双引号括起来的字符串中,不能含有双引号,
例如:1个字符串含有4个双引号,JavaScript 是判断不出那两个引号是一对的 ( “明“放假”天” )
数字是可以加减乘除的,但一旦加上引号 就不在是数字 而被当作字符串了
也可以用document.write() 直接输出字符串
布尔值:类型值只有2个:true 和 false , 用途:选择结构的条件判断;
布尔的名字是以英国数学家 ,布尔代数的奠基人 乔治 布尔来命名的
undefined :只是用var 声明了一个变量,但并没有对这个变量进行赋值 ,此时变量的值是"未定义值" 未定义值用undefined表示
空值null : 数字 字符串等数据在定义的时候,系统都会分配一定的内存空间,,在JavaScript 中,空值用null表示,
如果一个变量的值等于null ,如var n = null; 则表示系统没有给这个变量n 分配内存空间
null 和 undefined 相似,但也有一定的区别
总之,数据类型就是值的类型,就像数学,也分整数 小数 分数这样的类型
运算符
常见的运算符有5种
算术运算符
赋值运算符
比较运算符
逻辑运算符
条件运算符
数字 + 数字 = 数字
字符串 + 字符串 = 字符串
字符串 + 数字 = 字符串
总之 :只要有字符串参与就表示拼接
14
今天9999
今年是2017
<script>
var a = 10 + 4;
var b = "今天" + "9999";
var c = "今年是" + 2017;
document.write(a + "<br>" + b + "<br/>" + c);
</script>
a+b=14
a-b=6
a*b=40
a/b=2.5
a%b=2
<script>
var a = 10;
var b = 4;
var n1 = a + b;
var n2 = a - b;
var n3 = a * b;
var n4 = a / b;
var n5 = a % b;
document.write("a+b=" + n1 + "<br/>");
document.write("a-b=" + n2 + "<br/>");
document.write("a*b=" + n3 + "<br/>");
document.write("a/b=" + n4 + "<br/>");
document.write("a%b=" + n5 + "<br/>");
</script>
有两种情况
情况一,i++ 在使用i之后,再让i 的值加1
i=1;
j=i++
等价于
i=1;
j=i;
i=i+1
以上执行结果i = 2, j=1
情况二, ++i 在使用i之前,先让i的值加1
i=1;
j=++i;
等价于
i=1;
i=i+1; // i的值变成了2
j=i // i的值变成了2,所以 j 为2
以上执行结果i = 2, j=2
++在 i 的左边(前面)就是先使用 "i = i+1" 而后使用"j = i"
++在 i 的右边(后面)就是后使用 "i = i+1" 而先使用"j = i"
"i = i+1"的使用位置是根据++ 的位置来决定的
var y=10;
var k=y++;
console.log(y);//11
console.log(k);//10
var y=10;
var k=++y;
console.log(y);//11
console.log(k);//11
自减 运算符 -- 表示在"原来的值" 的基础上减1,i--等价于i=i-1
有两种情况
情况一,i--在使用i之后,再让i 的值减1
i=1;
j=i--
等价于
i=1;
j=i;
i=i-1
以上执行结果i = 0, j=1
情况二, --i 在使用i之前,先让i的值减1
i=1;
j=--i;
等价于
i=1;
i=i-1; // i的值变成了0
j=i // i的值变成了0,所以 j 为0
以上执行结果i = 0, j=0
--在 i 的左边(前面)就是先使用 "i = i-1" 而后使用"j = i"
--在 i 的右边(后面)就是后使用 "i = i-1" 而先使用"j = i"
"i = i-1"的使用位置是根据-- 的位置来决定的
var y=10;
var k=y--;
console.log(y);//9
console.log(k);//10
var y=10;
var k=--y;
console.log(y);//9
console.log(k);//9
赋值运算符
var str = "放假啦";
var a+=b 等价于 var a=a+b
var a-=b 等价于 var a=a-b
var a*=b 等价于 var a=a*b
var a/=b 等价于 var a=a/b
<script>
var a = 10;
var b = 5;
a += b;
b += a;
document.write("a的值是" + a + "<br/>b的值是"+b);
//a的值是: 15(10+5) a =a+b
//b的值是: 20(15+5) b = b+a
</script>
比较运算符
比较的结果是对的 则返回true; 如果比较的结果是错的 则返回false true和false是布尔值 true=1 false=0

var a, b;
a = 10;
b = 10;
console.log(a > b); // false
console.log(a < b); // false
console.log(a >= b); // true
console.log(a <= b); // true
console.log(a == b); // true
console.log(a != b); // false
//对于非数值进行比较时,会将其转换为数字然后在比较
console.log(1 > true); //false
console.log(1 >= false); //true
console.log(1 > "0"); //true
console.log(1 > null); //true
//如果符号两侧的值都是字符串时,不会将其转换为数字进行比较, 而会分别比较字符串中字符
// 比较多位时则是从前往后一位一位比较, 直到比较到不一样或者结束为止
// a的Unicode编码是:0061
// b的Unicode编码是:0062
console.log("a" < "b");//true
console.log("ab" < "ac");//true
注意:做关系比较的时候,一定要把值全部转为数字类型,一定要避免2个字符串在一起比较大小;
数值与数值的比较,比较他们的代数值;
字符串间的比较, 字符串里的数字逐个进行比较
NaN,与任何数值都不想等,包括其自身;
Null与undefined;相等,比较前不做任何转换;
运算数既非数字也非字符串,返回值为false;
只要有一个是数值,另外一个无论什么值,都会最终转为数值后再比较)
运算数既非数字也非字符串,返回值为false;
字符串与数值的比较,字符串转换为数值;
console.log(5 <= 6); //true
console.log(6 <= 6); //true
console.log("10" <= "6"); //true 字符串里的数字逐个进行比较,1<6
console.log("abc" <= "ahf"); //true b在h的前面
console.log("22a" <= 6); //false
console.log("22a" >= 6); //false
/*
永远是false 因为还有字母 他本想是转成数字进行和6比 但是有个字母a不好转
最后转成 NaN not a number NaN和数字比永远是false 总之不能不能转成
数字 所以他们没有办法比较
*/
console.log("12" >= 6); //true 12>=6
console.log("12" <= 6); //false 12<=6
//内部有个瘾式转换 转成数字12 和6进行比较
console.log(NaN>2);//false
//NaN和任何数据都不想等,包括自己
console.log("22a"?true:false);//true,因为非空的字符串是一个真值;
console.log("22a"==true);//NaN --->1 false
console.log("22a"==false);//NaN --->0 false
= 是赋值运算符,将右边的值赋值给左边的变量 var x = 10;
== 是比较运算符,用于比较左右两边的值是否相等
===严格等于 内容和类型都要一样 , !==是对===的否定
==不严格等于 只要内容相同即可 类型不做要求 !=是对==的否定
console.log("10" == 10); //true 内容都是10 只是类型不一样 一个数字 一个是字符串
console.log("10" === 10); //false 内容都是10 类型是一个是number 一个是string
// 如果要表达相等,写3个等号 是最严谨的,如果提前知道 类型是一样的 2个或3个等号都可以
console.log("10" != 10); //false
console.log("10" !== 10); //true
console.log("qiqi"===true);//false
console.log("qiqi"==="qiqi");//true
var person1={name:"qiqi"};
var person2={name:"qiqi"};
console.log(person1===person2);//false, 是不同的引用地址;在堆内存中储存是不一样的;
// undefined 衍生自 null, 所以返回true
console.log(null == undefined); // true;
console.log(null === undefined); // false;
//null、undefined 、NaN比较
console.log(null == 0); // false
console.log(undefined == 0); // false
// 永远不要判断两个NaN是否相等
console.log(NaN == NaN); // false
//可以通过isNaN()函数来判断一个值是否是NaN,如果该值是NaN则返回true,否则返回false
var num = NaN;
console.log(isNaN(num)); // true
逻辑运算符
!逻辑与 &:并且
//并且 如:老师叫你和小米一起去买水,两个都要去,一个不去就不行
// 有一个假 都假 要么两个都是真的
console.log(4 < 5 && 7 == 9); //false
console.log(4 < 5 && 7 == 7); // true
console.log(4 > 5 && 5 == 7); //false
!逻辑或 ||:或
// 或 如:老师叫你或是小米其中一个去买水,1个去即可,当然2个更是可以
// 有一个真 都真 要么两个都是假的
console.log(4 < 5 || 7 == 9); //true
console.log(4 < 5 || 7 == 7); //true
console.log(4 > 5 || 5 == 7); //false
var i = 2020;
console.log(i % 3==0); //false 不能整除
console.log(i % 2 == 0 && i % 5 == 0); //true 能被整除
console.log(i % 4 == 0 && i % 100 != 0 || i % 400 == 0); //true
//能被4整除,但不能被100整除 或者能被400整除
//写2个 或3个等号都一样 一样是一个数字,计算出来肯定是个数字 (类型都一样number)
逻辑短路运算符
<script>
//前面知道结果了,后面的就没有必要再走了
var i = 10;
console.log(4 > 5 && i++); //false
console.log(4 < 5 || i++); //true
console.log(i); //10 只走了前面,后面的i++并没有走 所以就是10
var i = 9;
console.log(0 || i++); //9 (i++整体的数值)
//执行||运算符 从左到右执行 遇到0认为是假 直接返回第二个表达式
console.log(i); //10
console.log(5 || i++); //5 true ( 或者是前面为真 后面的就不用走了)
console.log(i); //10 因为i++没有执行过,还是上面i 的值 10 从上往下执行
console.log(0 && ++i); //0 并且里一个假全为假
console.log(i); //10 一个都没走 还是继承上面的数字
console.log(6 && ++i); //11
//非0的数字为真 像这个最终的结果是由第二个表达式决定的
console.log(i); //11
</script>
条件表达式(三目运算符)
<script>
console.log(null ? 56 : 90); //90 false
//非0数字转化成true 0转成false 非空字符串转成true 空字符串转成false
var num = 91;
console.log(num % 2 == 0 ? "偶数" : "奇数"); //奇数 除不进
//条件成立就执行冒号前面的 ,不成立就执行冒号后面的
</script>

浙公网安备 33010602011771号