02、JavaScript-数据类型、运算符

每天一句:每个月要读一本书,离开学校了,你还要经常保持阅读的习惯,大学时候,考前的通宵达旦,说明你具备快速学习的能力,不要让这种能力钝化。


一、标识符&关键字&保留字

  • 标识符,就是变量、函数、属性的名字,或者函数的参数,标示符规则
  a、第一个字符必须是一个字母、下划线(_)或美元符($);
  b、其他字符可以是字母、下划线、美元符或数字;
  c、不能把关键字、保留字、true、false、null作为标识符;
  • 关键字是有特殊含义的,不能用作标示符


    关键字
  • 保留字虽然还没有特定用途,但它们很有可能在将来被用作关键字,所以不能作为标示符


    保留字

二、数据类型

JavaScript是弱类型脚本语言,声明变量时无需指定变量的数据类型,即是变量的数据类型是解释时动态决定的,但JavaScript的值保存在内存中时,也是有数据类型的。

基本数据类型:
  Number数值类型: 包含整数和浮点数;
  Boolean布尔类型: 只有true或false两个值;
  String字符串类型: 字符串变量必须用引号括住(单引号或双引号);
  Undefined类型: 专门用来确定一个已经创建但没有初始值的变量;
  Null类型: 用于表明某个变量的值为空;
【注: 复杂数据类型Object;ECMAScript不支持任何创建自定义类型的机制,所有的值都以上6中数据类型之一】
  • typeof操作符
    typeof操作符是用来检测变量的数据类型,对于值或变量使用typeof会返回字符串
  var num = 10;
  alert( typeof num );  // number
检测变量的数据类型
  • Undefined类型

    • Undefined类型只有一个值,即是特殊的undefined,在使用var声明变量,但没有对其初始化时,变量的值就是为undefined,这个值主要的目的是为了比较的
      var a;
      alert(a);  // undefined
    
    • 对于未初始化的变量与根本不存在的变量(未声明的变量是不一样的)
      var num;    
      alert(num);  // undefined
      alert(age); // ReferenceError: age is not defined
    

    注: typeof num和typeof age都返回的是undefined。但在逻辑上,它们的值,一个是undefined,一个是报错;但它们的类型都是undefined,所以定义变量时,尽可能的不要只声明不赋值!

  • Null类型

    • Null类型只有一个值,即特殊值null,它表示变量的值为空或空对象引用,而typeof操作符检测null会返回object
      var box = null;
      alert(typeof box);  // object
    
    • undefined是派生自null的,因此它们的相等性测量返回的是true
      if( null == undefined ) // true
    

注意: undefined与null之间的差别比较微妙,undefined表示没有初始值,而null表示变量有值的,只是其值为null!!

  • Boolean类型
    • Boolean类型只有两个值: true和false,但true不一定等于1,false不一定等于0;另外JS区分大小写的,True和False或其他都不是Boolean类型的值
      var box = true;
      alert(typeof box);  // boolean
    
    • 虽然Boolean类型的字面量只有true和false两种,但所有类型的值都有与这个两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以使用转型函数Boolean()
      var hello = 'hello world!';
      // 强制性转换
      var helloB = Boolean(hello);
      alert(helloB);  // true 
    
      // 隐式转换
      if(hello){
        alert('条件为true在这里');  // 执行这条语句
      } else {
        alert('条件为false在这里');
      }
    
布尔类型转换
  • Number类型
    Numer类型包括两种数值: 整形和浮点型。

    • 最基本的数值字面量是十进制整数
      var num1 = 100;     // 十进制整数
    
    • 八进制字面量(以8为基数),前导必须是0,八进制序列(0~7)
      var num2 = 070; // 八进制
      var num3 = 079; // 无效八进制,自动解析为79
      var num4 = 08;   // 无效八进制,自动解析为8
    

    【注意: 八进制数并不是所有的浏览器都支持的】

    • 十六进制字面量,前面必须是0x,后面是(09和af)
      var box = 0xA; // 十六进制,10
      var box = 0x1f; // 十六进制,31
    
    • 浮点型,就是该数值中必须包含一个小数点
      var box = 3.8;
      var box = 0.8;
    
    • NaN,即非数值(Not a Number)是一个特殊的值,这个数值用于表示一个本来要返回数值的操作,未返回数值的情况(这就不会导致代码错误而终止程序,因此不会影响程序执行);0除以0,或者以Infinity(正无穷大)执行算术运算都会产生NaN的结果
      var box = 0 / 0;        // NaN
      var box = 12 / 0;     // Infinity
      var box = 12 / 0 * 0;   // NaN
    

    注意: NaN不与任何值相等!!

    • isNaN()函数,用来判断这个值到底是不是NaN【注: 将内容转换为数值】
      alert(isNaN(NaN));  // true
      alert(isNaN(25));   // false, 25是一个数值
      alert(isNaN('25'));  // false,‘25’是一个字符串数值,可以转为数值
      alert(isNaN('Lee')); // true,‘Lee’不能转为数值
      alert(isNaN(true));  // false,true可以转为数值1 
    
    • Number()函数,将非数值转为数值,可以用于任何类型(不能转为数值,即是NaN)
      alert(Number(true));            // 1,Boolean类型true和false分别对应1和0
      alert(Number(25));          // 25,数值类型直接返回
      alert(Number(null));            // 0,空对象返回0
      alert(Number(undefined));   // NaN,undefined返回NaN
    
      // 其实就是将双引号去除,判断是否为数值
      // 字符串1,只包含数值的字符串,会直接转成成十进制数值,如果包含前导0,即自动去掉
      alert(Number('456'));   // 456
      alert(Number('070'));   // 70
      alert(Number('0x1f'));       // 十六进制转为十进制即31
    
      // 字符串2,只包含浮点数值的字符串,会直接转成浮点数值,如果包含前导和后导 0,即自动去掉
      alert(Number('08.90')); //8.9    
    
      // 字符串3,如果字符串是空,那么直接转成0
      alert(Number('')); // 0
    
      // 字符串4,如果不是以上三种字符串类型,则返回NaN
      alert(Number('Lee123')); //NaN
      alert(Number('123aa'));  //NaN
    
    • parseInt()取整函数,对于Number()函数在转换字符串时比较复杂也不够合理,所以更多会使用到parseInt(),从第一位解析到非整数位置
      alert(parseInt('456Lee'));  // 456,会返回整数部分
      alert(parseInt('Lee456Lee'));  // NaN,如果第一个不是数值,就返回 NaN
      alert(parseInt('12Lee56Lee')); // 12,从第一数值开始取,到最后一个连续数值结束
      alert(parseInt('56.12'));    // 56,小数点不是数值,会被去掉
      alert(parseInt(''));           // NaN,空返回 NaN
    
    • parseFloat()函数,用于浮点数值转换的,和parseInt()一样,从第一位解析到非浮点数位置
      alert(parseFloat('123Lee'));    // 123,去掉不是别的部分
      alert(parseFloat('123.4.5'));   // 123.4,只认一个小数点
      alert(parseFloat('0123.400')); // 123.4,去掉前后导
    
  • String类型
    String可以用双引号或单引号表示。

    • toString()函数,可以把值转为字符串
      var box1 = 11;
      alert(typeof box1.toString());  // string
      var box2 = true;
       alert(typeof box2.toString()); // string
    
    • toString()一般是不需要传参,但在数值转为字符串时,可以传递进制参数
      var box = 10;
      alert(box.toString());      // 10,默认十进制输出
      alert(box.toString(2));       // 1010,二进制输出
      alert(box.toString(8));       // 12,八进制输出
      alert(box.toString(10));     // 10,十进制输出
      alert(box.toString(16));      // a,十六进制输出
    
  • Object类型

  var test = null;
  alert( typeof test );

三、运算符

  • 赋值运算符'='
  // 将变量str赋值为HelloWorld
  var str = 'HelloWorld';
  • 一元运算符
    只能操作一个值的运算符即是一元运算符;

    • 递增'++'和递减'- -'
      var box = 100;
      ++box; // 把box累加一个1,相当于 box = box + 1 
      --box; // 把box累减一个1,相当于 box = box - 1 
      box++; // 同上
      box--; // 同上
    
    • 前置和后置的区别
      没有赋值操作,前置和后置是一样的;
      有赋值操作符时,前置运算符会先加加(减减)操作再赋值;后置运算符先赋值再加加(减减)操作;
        var box = 100;
        var age = ++box;         // age值为101,前置即是先执行加加操作,再赋值
        var height = box++;       // height值为100,后置即是先赋值,再执行加加操作
      
        var a = 10;
        var b = a++ + 6;      
        alert(b);         // 16
      
        var e = 10;
        var f = ++e + 6;  
        alert(f);         // 17
      
  • 算术运算符(二元运算符)

    • 加法运算符 '+'
    • 减法运算符 '-'
    • 乘法运算符 '*'
    • 除法运算符 '/'
    • 取余(求模) '%'
  • 关系运算符(二元运算符)
    小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、等于(==)、不等于(!=)、全等(恒等)(===)

    • 等于(==): 如果前后两个变量的值相等,则返回true
        // 判断5是否等于'5'
        alert( 5 == '5' );    // true,JS支持自动类型转换,所以需要时,会将字符串'5'转为数值类型
      
    • 全等(===): 必须前后两个变量的值相等,数据类型也相同,才会返回true
      // 判断5是否全等于'5'
      alert( 5 === '5');  // false,因为两个数据类型不匹配
    
  • 逻辑运算符

    • 逻辑与 &&(并且): 必须所有条件都为true,才返回true,否则返回false
      alert( 5>4 && 10>8 );   // true,条件5>4成立,条件10>8成立,返回true
    
    • 逻辑或 ||(或者): 只要有一个条件为true,就可以返回true,否则返回false
      alert( 5>4 || 10<8 );   // true,条件5>4成立,虽然10<8不成立,但还是返回true
    
    • 逻辑非 !: 只操作一个操作数,如果操作数是true,则返回false;如果操作数是true,则返回false
      alert( !false );    // true
    
  • 三目运算符
    三目运算符其实就是if...else...的简写操作

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

推荐阅读更多精彩内容