JS第二天

对象到其他类型之间的数据转换

对象到boolean

  • 非空对象 是true
  • 空对象(是null,不是{}) false

对象到字符串

  • 调用对象的toString方法。
    String(o);//String()调用o的toString();
    o.toString();//o调用自身的toString()方法

对象到number

  • 使用Number()转换
  • 如果对象既没有重写toString()方法,也没有重写valueOf(),返回NaN
    var o = {
    name : "briup",
    age :22
    };
    Number(o); // NaN
  • 如果对象只重写了toString()方法,没有重写valueOf()方法,将获
    取到toString()返回的值,然后对该值进行转换
    var o = {
    name : "briup",
    age :22,
    toString:function(){
    return "1";
    }
    };
    Number(o);
    // 默认转换o.toString(),既Number("1"),结果为 1
  • 如果对象既重写了toString()方法,也重写了valueOf()方法,或者仅
    重写了valueOf()方法,将调用valueOf(),并且取得返回值,对该返回
    值进行转换
    var o = {
    name : "briup",
    age :22,
    toString:function(){
    return "1";
    },
    valueOf:function(){
    return false;
    }
    };
    Number(o); // 默认转换o.valueOf(),既Number(false),结果为 0
  • parseInt()/parseFloat()
    始终调用toString()将其返回值进行parseInt()转换

操作符

一元操作符

++,--,+,-操作符应用任何类型数值都返回一个数值类型,先将任意类型的值转换为Number
然后进行运算

递增 ++

  • 前置:操作该变量之前进行递增或者递减操作
  • 后置:操作该变量之后进行递增或者递减操作

对任意数据类型的操作数都适用,使用前先将其转换为数字(Number()),然后再进行运算

在应用于对象的时候,优先先调用对象的valueOf方法,以取得一个可供操作的值,如果子类
对象仅重写了toString(),调用该方法。

递减 --

  • 前置:操作该变量之前进行递增或者递减操作

  • 后置:操作该变量之后进行递增或者递减操作

    对任意数据类型的操作数都适用,使用前先将其转换为数字,然后再进行运算

    在应用于对象的时候,先调用对象的valueOf方法,以取得一个可供操作的值,如果子类
    对象仅重写了toString(),调用该方法。

加 +

    相当于调用Number();
var a = "12"
+a ;    // 12  相当于调用了Number("12")

减 -

    将一元减应用于数值时,数值会变成负数。
    将一元减应用于非数值时,
遵循与一元加操作符相同的规则,最后将得到的数值转化为负数

布尔操作符, 非(NOT),与(and),或(OR)

逻辑非 !

    该操作符应用任何类型数值都返回一个布尔值。先将任意类型的数值转换为Boolean,
然后取反,!a ==> !Number(a)
    !0    //true
!""    //true    
!NaN    //true    
!false    //true
   连用两次逻辑非 ,就可以将任意数据类型转化为Boolean类型,!!a ==> Number(a)
    !!""    //false

逻辑与 && (同真才真,有假则假)

短路
可应用于任意数值。如果有一个操作数不是布尔类型,逻辑与就不一定返回boolean类型

  • 如果第一个操作数是
    null,NaN,undefined,false,0,""可被转换
    为false的值的时候返回该值

  • 如果第一个数其他,返回第二个数

      var s1 = 8;
      var s2 = "briup";
      var s3 = "";
      var result = s1 && s2;    //briup
      var result2 = s3 &&s2;  //空字符串
    

逻辑或 ||(有真则真,同假才假)

false ||
如果两个操作数都是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值
如果第一个操作数是null,NaN,undefined,false,0,"" 则返回第二个操作数

加性操作符

加法 +

    m + n
  • 当m,n不为String,Object类型的时候,先将m,n转换为Number类型,然后再进行计算

      true + false;      //1;Number(true)+Number(false);
      true + 1;      //2;Number(true) + 1
      null + undefined; //NaN;Number(undefined) -> NaN
    
  • 当m,n有一个为String,无论另一个操作数为何(但不为对象)都要转换为String,然后再进行拼接

      "1" + true;    // 1true
      "1" + undefined;// 1undefined
      "1" + 1;    // 11
    
  • 当m,n 有一个为对象,如果该对象既重写toString,又重写了valueOf方法,调用valueOf方法获取返回值,
    将该返回值和另外一个操作数进行运算。如果该对象没有重写valueOf方法,将调用toString方法获取返回值,
    将该返回值和另外一个操作数进行运算。
    var o = {
    name:"briup",
    valueOf:function(){
    return "1";
    }
    }
    o+1; //2;o+1

减法 -

返回值为Number

无论操作数为任何类型,先将其使用Number()转换器转换为Number类型,然后再计算。

    true - 1;    //0;    1-1
    null - true;    //-1 ;    0-1
    1 - undefined    //NaN
    var o = {
        name:"briup",
        valueOf:function(){
        return 1;
        }
    }
    o-1;        //0;    1-1

乘性操作符

当操作数为非数值的时候执行自动的类型转化Number()

乘法 *

  • 如果两个数都是数值,执行常规的乘法计算
  • 如果一个操作数是NaN,结果为NaN
    超过数值范围返回Infinity(Infinity 属性用于存
    放表示正无穷大的数值。
  • 如果有一个操作数不是数值,则在后台先调用Number()将其转换为数值。

除法 /

  • 如果一个操作数是NaN,结果为NaN (0/0 ; NaN)
    一个非0值除0 Infinity

  • 如果有一个操作数不是数值,则在后台先
    调用Number()将其转换为数值。

          var s1 = 5;
          var s2 = 2;
          var result = s1/s2;  //2.5
    

取余 %

  • 如果两个数都是数值,执行常规的取余计算
  • 如果一个操作数是NaN,结果为NaN(任意数%0 ; NaN)
  • 如果有一个操作数不是数值,则在后台先调用Number()将其转换为数值。

关系操作符

< > <= >= ,返回一个boolean值

  • 如果两个操作数是字符串,比较字符串中对应位置的每个字符的字符编码值

    a -> z
    "10" -> "9"
      "a">"b"    //false
      "1">"a"    //false
    
  • 如果一个操作数是数值,将另外一个操作数也转换为数值进行比较

      "3">1;        //true
      3>true;        //true 3>Number(true)
      3>undefined;    //false Number(undefined)=NaN ;任何数和NaN比较结果都为false
    
  • 如果一个操作数是对象,先调用valueOf(),再调用toString()将返回值与另外一个操作数比较
    如果没有重写toString() valueOf()则始终为false

      var o = {
          name:"briup",
          valueOf:function(){
          return "13";
          }
      }
      o>2        // true ; "13">2
    

相等操作符

相等和不相等 ==, != (先转换在比较)

  • 如果有一个数为boolean类型,比较前先转换为数值。
  • 如果一个数为字符串,另外一个数为数值,比较前先将字符串转换为数值
  • 如果两个都是字符串,比较字符序列
  • 如果一个数是对象,另外一个数不是,则调用valuesOf()方法,用得到的基本数据类型进行比较
    null == undefined //true
  • 如果一个数为NaN,相等操作返回为false,不等操作返回true
  • 如果两个数都为对象,则比较他们是不是同一个对象,如果两个操作数都指向同一个对象,返回true

全等和不全等

    仅比较不转换,先比较两个数所属的数据类型,如果类型不同则不同,如果类型相同
再继续比较两个数的值
console.log("55" == 55); true
    console.log("55" === 55);false
null == undifined;  //false

三目运算符 ? :

   variable = boolean_expression ? true_value : false_value;
 如果boolean_expression为true,将true_value赋给variable,
   否则将false_value赋给variable
       求任意两个数之间最大值
       function max(m,n){
      return m>n?m:n;    //如果m>n为true返回m,如果m>n为false,返回n
       }

赋值运算符 =

   将右侧的值赋给左侧的变量
   可以和其他算术运算符连用 *= /= %= += -= 
   a *= 3;

逗号操作符

   可以在一条语句中执行多个操作
   var num1=1,num2 = 2, num3 = 3;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 什么是 JavaScript 语言? JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script...
    oWSQo阅读 1,777评论 0 1
  • 最近开始学习的JS,做这个笔记只是为了记录一下自己的学习情况,也算是督促自己每天多看点书。基本都是书上的内容整理了...
    丨ouo丨阅读 247评论 2 1
  • 第一章 Javascript简介 Javascript实现 核心(ECMAScript) 文档对象模型(DOM) ...
    江上风平浪静阅读 591评论 0 0
  • 最近几年,跑步运动风靡全球,无数名人参与这种简单的运动,“彩跑”“夜跑”等各种跑族也随处可见。我佩服他们的毅力,但...
    妙所阅读 5,992评论 5 3
  • 生活中每个人都会有恐惧,这是一种动力,让我们去努力的一种动力。在生活中我是一个勇敢的人,不管是恋爱的时候,或工作的...
    蔡志杰阅读 317评论 0 0