数据类型(自用型笔记)

数据类型

先前申明:以下内容为零基础笔者的学习记忆内容,其中大部分手打摘自于LINK,另外有自己整理和添加的部分。如果能够同样帮助到初学的你,也更希望能够直接去支持以上链接的作者。

Number ( 数字 )

  • 不区分整数与浮点数,统一以Number表示
    其中包括:
    整数 //123
    浮点数 //123.4
    科学计数法 //1.234e3
    负数// -2
    NaN //Not a Number
    Infinity //无限大,2/0

  • 关于运算规则
    可以直接进行四则运算,规则优先度与数学一致

    1+2; //3
    (1+2)* 5/2; //7.5
    2/0; //Infinity
    0/0; //NaN
    10%3; //1
    10.5%3*5; //7.5
    (求余运算与乘除优先度相同)

String ( 字符串 )

  • 以单引号(‘ ’)或双引号(“ ”)括起来的任意文本,由零个或多个字符(字母,数字,标点符号或空格)构成 (若字符串内容中包括单、双引号,则使用转义字符标识)

  • 转义字符转义:
    \n 表换行
    \t 制表符
    \\ 表
    \x## ASCII字符十六进制(\x41等同于‘A’)
    \u#### 表Unicode字符(统一码)

  • 多行字符串
    通常情况下多行字符由’\n’来换行连接
    ES6标准新增另一种方法,即用反引号标识(`…`):

    ` 多



    串`

  • 模板字符串
    通常情况下将多个字符串用 ‘ + ’ 链接:

    var a='A';
    var b='B';
    var S=a+b; //'AB'

    ES6标准新增模板字符串表示方式:

    var a='A';
    var b='B';
    var s=${A},${B};//'A,B'

  • 字符串的操作

    常见操作:

    • 测量字符串长度

      var s='Hello!!';
      s.length;//8

    • 获取某个指定位置的字符(类似于从数组中取某一元素,索引从0开始)

      var s='Hello !';
      s[0]; // 'H'
      s[6]; // ' '
      s[7]; // '!'

      字符串不可变,若对索引赋值不会有错误,同时也不会有任何效果

      var s='Hello !';
      s[0]='X';
      alert(s);//s[0]的值仍然为‘X’

      // alert();为输出内容(弹出弹窗)

      • 以下方法不会改变字符串原有内容,而是直接返回一个新的字符串
    • toUpperCase
      将一个字符串全部变为大写,仅对字母有效

      var s='abc123!#¥%';
      s.toUpperCase();// 返回'ABC123!#¥%'

    • toLowerCase
      将一个字符串全部变为小写,与前者用法相同

      var s='ABC123!#¥%';
      s.toUpperCase();// 返回'abc123!#¥%'

    • indexOf
      搜索指定字符串出现的第一个字符的索引

      var s='abc123!#¥%';
      s.indexOf('abc');//返回 0
      s.indexOf('123');//返回 3

    • substring
      返回指定索引区间子串

      var s='abc123!#¥%';
      s.substring(0,5);// 从0开始到4(左闭右开),返回'abc12'
      s.substring(5);// 从索引5开始到结束,返回'3!#¥%'

Boolean (布尔值)

  • 只有两个值,即 true、false

  • 关于布尔运算

    • && 与运算

      true && true; // true
      true && false; // false
      true && false && true; // false

    • || 或运算

      false || false; // false
      false || true; // true
      false || true || false; //true

    • ! 非运算 ( 单目运算符 )
      !true; // false
      ! false; // true
      !(2 > 5); // true

布尔值经常在条件判断中运用,同时其值表现为if、else的选择

(关于其及以下比较运算的优先级还有待尝试)

关于比较运算
  • 比较运算符:> ,>= ,==

    另外,‘ == ’可自动转换数据类型再进行比较(可能得到诡异结果)

    ‘ === ’比较不会转换数据类型,若不一致则直接返回‘false’

  • NaN===NaN ; // false

    isNaN(NaN) ; // true (唯一的判断方式)

  • 浮点数比较时使用其差的绝对值与一定阈值相比较

null & undefined

  • null表示“空”值 ;undefined表示“未定义”

  • 两者相似也几乎无区分意义,大多数情况下应当使用“ null ”

  • “ null ”可以用来将对象清空

eg : var a=null ; //将a清空

  • undefined 用于判断函数参数是否传递(值传递、指针传递、传递引用),当索引越界会以此填充未定义处

数组

  • 是一组有序排列组合(object下的数据集合为无序),可以包含任意数据类型

  • 创建数组的两种方法

    1. 直接使用[ ] 包括元素来实现 ( 元素之间以“,”分隔)

      [ 1,2,3.14,‘hello’,null,true,undefined]

    2. 使用Array()函数实现

      new Array(1,2,3); // 创建了数组[ 1,2,3]

  • 数组的索引访问(起始值为0)

    eg:
    var arr=[1,2,3,4];
    arr[0]; //返回 1
    arr[1]; //返回 2

    • 可以通过索引将对应的元素修改为新的值

      var arr=[1,2,3,4];
      arr[0]=99;
      arr;//arr变为[99,2,3,4]

      大多数其他编程语言不允许直接改变数组大小,而JS不会产生任何错误,故不建议直接修改其大小,保证访问索引时不会越界**(包括之后提到的直接对Array的length属性的修改)**

  • length
    取得Array的长度

    var arr=[ 1,2,3.14,'hello',null,true,undefined];
    arr.length;//7

    • 直接给length赋新值会导致Array大小变化:

      var arr=[ 1,2,3];
      arr.length;//3

      arr.length=6;//相当于改变arr的长度
      arr;//arr变为[1,2,3,undefined,undefined,undefined]

      arr.length=2;//
      arr;//arr变为[1,2]

  • indexOf
    与string类似的 用于搜索一个指定元素的位置,返回索引值

    var arr=[ 1,2,3.14,'hello',null,true,undefined];
    arr.indexOf(1);//返回元素1的索引 0
    arr.indexOf(3.14);//返回元素3.14的索引 2
    arr.indexOf('hello');//返回元素hello的索引 3
    arr.indexOf('1');//返回 -1,未找到元素'1'
    (直接输入hello会报错)

  • slice

    与string的substring()类似 用于截取Array的部分元素,然后返回一个新的Array

    var arr=[1,2,3,4,5,6,7,8,9];
    arr.slice(0,3);//从0开始到2(左闭右开),返回[1,2,3]
    arr.slice(3);//从3开始取到最后,返回[4,5,6,7,8,9]

    若不传递参数,将会截取输出所有的元素,可以由此复制一个Array:

    var arr=[1,2,3,4,5,6,7,8,9];
    var copy=arr.slice();
    copy==arr;//false*

    • 由以上代码最后一句引出关于数组之间数据是否相等(拥有相同元素的比较)

      ​ Javascript不能直接用等号来判断数组是否相等,带*号的语句无论是使用=====,输出结果都将为'false'
      ​ 若要判断数组是否相同,需要将数组先转化为字符串再比较,无论使用哪种相等比较符号结果都为true

      var arr=[1,2,3,4,5,6,7,8,9];
      var copy=arr.slice();
      arr.toString()==copy.toString();//true
      arr.toString()===copy.toString();//true

      ​ 若比较两个数组内元素是否完全相同 (元素顺序不一定),则先对数组进行排序再进行以上步骤

      var arr1=[1,2,3,4,5,6,7,8,9];
      var arr2=[1,2,3,5,4,6,7,8,9];
      arr1.sort().toString()==arr2.sort().toString();//true
      arr1.sort().toString()===arr2.sort().toString();//true

      ​ 关于转字符串(toString)和排序(sort)之后就会提到

  • push和pop
    push() 向Array的末尾添加若干元素,输出Array新长度
    pop() 将Array的最后一个元素删除,输出删掉的元素值

    var arr=[1,2];
    arr.push('A','B');//返回Array新长度(4)
    arr;//[1,2,'A','B']
    arr.pop();//返回'B'
    arr;//[1,2,'A']

    arr.pop();arr.pop();arr.pop();//连续pop 3次只会输出最后一个删掉的值1
    arr.pop();//返回undefined
    arr;//[]

  • unshift和shift
    unshift() 往Array的头部添加若干元素,输出Array新长度
    shift() 将Array的第一个元素删除,输出删掉的元素值

    var arr=[1,2];
    arr.unshift('A','B');//返回Array新长度(4)
    arr;//['A','B',1,2]
    arr.shift();//返回'A'
    arr;//['B',1,2]

    //连续使用与对空数组操作同上

  • sort

    对Array进行排序并直接修改其元素的位置,直接调用时按照默认排序 (按照自己指定的顺序排序需要使用函数)

    var arr=['A','C','B'];
    arr.sort();
    arr;//['A','B','C']

  • reverse
    整体反转Array

    var arr=['one','three','two'];
    arr.reverse;
    arr;//['two','three','one']

  • splice

    修改Array的万能方法

    var arr=['A','B','C','D','E','F'];

    arr.splice(2,3,'a','b');//索引2开始删除 3个元素,然后再添加元素‘a’,‘b’,以数组形式输出被删除的元素
    arr;//['A','B','a','b','F']

    /*若不删除元素,则输入'0‘
    若不添加只删除,则不输入字符串*/

  • concat
    将当前的Array与另一个Array(或者任意个元素与Array)连接,返回新的Array(没有修改当前的Array)

    var arr=[1,2,3];
    var arrr=arr.concat([5,6,7],'a');
    arrr;//[1,2,3,5,6,7,'a']

    concat中可以直接使用数组,如:
    var arrrr=arr.concat(arr);
    arrrr;//[1,2,3,1,2,3]

  • join
    将当前Array中所有元素用输入指定的字符串连接 (若元素不是字符串则自动转换为字符串)

    var arr=[1,2,3,'a'];
    arr.join(+);//'1+2+3+a'

  • 多维数组
    某数组中的元素为Array,则该数组为多维数组

    var arr=[1,2,3,[111,222,333]];

    关于如何索取到多维数组内部数组的值:

    var arr=[1,2,3,[111,222,333]];
    var x=arr[3][2];//[3]先取最外层数组中的数组元素,[2]取内层数组中的元素
    console.log(x);//333

对象(object)

  • 是由键-值组成的无序集合

    对象的键都是字符串类型,值不限数据类型

  • 对象属性的定义:

    eg:

    var person = {
    name : 'Bob',
    age : 20 ,
    tags : ['1',2,'3‘] ,
    ‘has-Car’: true,
    zipcode:null
    };

    • 键值对以xxx.xxx形式申明。.操作符完成对属性的访问,也可以用xxx[‘xxx’]来访问
      键值对申明之间以‘,’隔开,且最后一条键值对不在末尾加‘,’
      可以用对象属性来定义一个数组,但该数组无序
      若属性名包含特殊字符,需将属性名以单括号括起
      调用对象属性中的数组方法与普通数组调用相同,如:
      person.tags[0]; // “1”
      person.tags[1]; // 2
  • 访问不存在的属性将返回undefined

  • JavaScript的对象为动态属性,可以自由添加删除属性

    var xiaoming={name:'小明'};
    xiaoming.age;//undefined
    xiaoming.age=18;//增加一个age属性
    delete xiaoming.age;//删除age属性

    若删除一个不存在的属性不会报错//会返回true (局部测试结果)
    在这里插入图片描述

  • 检测某对象是否拥有某一属性

    var xiaoming={name:'小明'};
    'name' in xiaoming;//true
    'age' in xiaoming;//false
    'toString' in xiaoming;//true*

    关于最后一句中的’toSrting’为xiaoming继承得到的属性,即该属性本不是xiaoming的。
    “因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,故xiaoming也拥有该属性”
    判断某属性是否为某对象自身所拥有的

    var xiaoming={name:'小明'};
    xiaoming.hasOwnProperty('name');//true
    xiaoming.hasOwnProperty('toString');//false

变量

  • 变量名:由大小写英文、数字、$与 _ ,不可以数字开头,不可以JS关键字作为变量名。

    申明变量,如:
    var a; // a=undefined

    var $b = 1;

    var s_007 = '007s'; // s_007为字符串

    var A = true ;

    var n= null ; //n的值为“空”

进行变量申明时可以多次进行,但只能进行一次’var‘申明:

var a=123;
a='123';

(显示变量内容:console.log(x);

  • 关于strict模式

    用于修补js‘’未使用var申明的全局变量多次使用导致相互影响产生错误‘’的缺陷,在该模式下将未用var申明的变量自主强制通过var申明。

    • 使用方式:‘ use strict ’ // 不支持strict的浏览器将报错‘ReferenceError’

猜你喜欢

转载自blog.csdn.net/qq_51686247/article/details/109167811