数据类型及转换

数据类型分两种:基本数据类型 (只有一个值) 和 引用数据类型(可含多个值)
基本数据类型有五种 :数字  字符串  布尔值  未定义值和空值
引用数据类型有两种: 数组 和 对象


基本数据类型
数字:是最基本的数据类型,也就是数学中的数字 如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>

 

 

 

自增 运算符 ++ 表示在"原来的值" 的基础上再加1,i++等价于i=i+1
有两种情况
情况一,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>

 

 



















        

 



































posted @ 2021-01-02 18:54  沁莹  阅读(422)  评论(0)    收藏  举报