JS中的数据类型

271 阅读6分钟

JS中的数据类型

数据类型

基础数据类型:number,string,boolean,null,undefind

引用数据类型:function,Object,Arrary

null和undefind的区别

null

null表示准备用来保存对象,还没有真正保存对象的值。从逻辑角度上看null表示一个空对象指针。null是一个对象(空对象,没有属性和方法)

typeof null //Object

null的典型用法:

  • 作为函数的参数,表示该函数的参数不是对象
  • 作为对象原型链的终点
undefined

undefined:表示一个不存在的值。undefined是一个表示“无”的原始值或事表示“缺少值”,就是说这里应该有一个值,但是还没有定义,就尝试获取这个值的时候就会返回undefined。

typeof undefined //undefined

JS中会返回undefined值的情况:

  • 变量被声明了,但是没有赋值,就等于undefined;
let a
console.log(a) //undefined
  • 调用函数时,应提供的参数没有提供,则该参数为undefined;
function fn(a){
    console.log(a) //undefined
}
fn()
  • 对象没有赋值的属性,该属性的值为undefined;
let obj = {}
console.log(obj.name) //undefined
  • 函数没有返回值时,默认返回undefined
//如果未设定返回值默认返回undefined
function fn(){}
let re = fn()
console.log(re) //undefined

//设置了return,但没有显式的返回任何内容,返回值为undefined
function fun(){
    return
}
let re2 = fun()
console.log(re2) //undefined
  • 当将一个变量赋值为undefined时,返回undefined
let a = undefined
console.log(a)  //undefined

注:任何时候都不建议显示的设置一个变量的值为underfed,但如果用于存储对象的变量还没有真正的存储变量,应该将该值设置为null。但是实际上undefined是由null值派生的,在两者的相等性测试中返回true。

简单数据类型

number类型

number为数字类型,在JS中我们还可以通过Number 这个内置的构造函数来创建数字类型的值。推荐使用字面量创建。

<script>
    // 使用构造函数创建数值
    let x = new Number('10');
    let y = new Number(5);

    // 字面量创建数值
    let z = 20;

    // 检测是否属于同一个构造函数
    console.log(x.constructor === z.constructor);//true
</script>

数字类型的常用方法:

  1. toFixed:用于保留几位有效数字
  2. parseInt:用于转化为数字类型并取整数
  3. parseFloat:用于转化为数字类型并取浮点数

string类型

string为字符串类型,在JS中我们还可以通过String这个内置的构造函数去创建字符串类型的值。推荐使用字面量创建

<script>
    //1.字面量创建
    let str1 = '张一一'

    //2.构造函数创建
    //任何一个字符串都相当于new一个构造函数得到的实例对象
    /*
    字符串对象具有的属性:
    1. length:用来获取字符串的属性
    2. 索引值:例:str[0]可以获取第一个字符
    */
    let str2 = new String('张一一')
</script>

字符串类型常用的方法:

  1. split:分割字符串成为数组,加入''可以将每一个字符转化为数组的值

  2. toLocaleLowerCase:把字母转换为小写

  3. toUpperCase:把字母转换为大写

  4. indexOf:首次出现的字符的索引值,找到了会返回首次出现的索引值,找不到就返回-1

  5. lastIndexOf:尾次出现的字符的索引值,找到了会返回尾次出现的索引值,找不到就返回-1

  6. trim:用于去除字符串两端的空白

  7. substr:截取字符串,表示从哪里开始截截几个

    语法:字符串.substr(start,length)

    注:如果只有一个参数,会从起始位置截取到最后

  8. substring:截取字符串,开始位置上的字符可以取到但是结束位置上的字符取不到

    语法:字符串.substring(起始索引值,结束索引值)

    注:如果只有一个参数,会从起始位置截取到最后

boolean类型

boolean类型有两个值:true,false。在JS中我们可以通过Boolean创建布尔值。推荐使用字面量方式创建。

JS中默认为false的值:undefind,null,''空字符串,数字0,数字NaN,false

<script>
     // 使用构造函数创建布尔类型
      let locked = new Boolean('10');

      // 字面量创建布尔类型
      let flag = true;

      // 检测是否属于同一个构造函数
      console.log(locked.constructor === flag.constructor);//true
</script>

引用数据类型

Object类型

object数据类型(对象),可以通过object这个内置的构造函数创建用来创建一个普通对象。更推荐字面量形式创建。

<script>
  // 通过构造函数创建普通对象
  let user = new Object({name: '小明', age: 15});
  
  // 对象语法简写
  let name = '小红';
  //字面量形式创建
  let people = {
    // 相当于 name: name
    name,
    // 相当于 walk: function () {}
    walk () {
      console.log('人都要走路...');
    }
  }
</script>

普通对象在内存中的存储方式:普通对象数据保存在堆内存之中,栈内存中保存了普通对象在堆内存的地址。如图所示:

object-1.png

因为栈内存放的是堆内存的地址,所以普通对象赋值后是将地址赋值给另一个对象。因此无论修改哪个变量另一个对象的数据值也会相当发生改变。如图所示:

object-2.png Object的方法:

  • Object.assign 静态方法创建新的对象

  • Object.keys 静态方法获取对象中所有属性

  • Object.values 表态方法获取对象中所有属性值

Array类型

arrary类型(数组),可以通过Array这个内置的构造函数创建用来创建一个数组。更推荐字面量形式创建。

<script>
  // 构造函数创建数组
  let arr = new Array(5, 7, 8);

  // 字面量方式创建数组
  let list = ['html', 'css', 'javascript'];
</script>

数组在内存中的存储方式与普通对象一样,如下图所示:

array-1.png 数组在赋值时只是复制了栈内中的地址,而非堆内存中的数据,因此数组赋值后,无论修改哪个变量另一个对象的数据值也会相当发生改变。如下图所示:

array-2.png Array的方法: Array方法:

  1. pop删除数组的最后一项,并返回

  2. push往数组最后的位置追加元素,并返回新数组的长度

  3. splice删除或者替换。语法:数组.splice(删除元素的下标,删除个数,将删除元素替换为第三个参数所写的值) 会将删除元素放入新数组并返回

  4. shift删除数组的第一项并返回删除元素

  5. unshift往数组最前面追加,并返回新数组的长度

  6. 实例方法 concat 合并两个数组,生成新数组

  7. 实例方法 reverse 反转数组

  8. 实例方法 join 数组单元素拼接成了字符串。数组.join()等括号内为每个值两两之间拼接的内容默认为,

  9. 实例方法 indexOf 查找在数组中首次出现的索引位置,找到了就返回首次找到的下标,没找到则返回-1

  10. 实例方法lastIndexOf查找在数组中尾次出现的索引位置,找不到就是-1

  11. 静态方法 from 伪数组转成数组。注意:要想把伪数组转成真数组,必须有length属性

  12. 静态方法 isArray 判断a是否是数组

  13. find用于查找首次满足条件的值,并返回值,未找到就返回undefind

  14. findIndex用于查找首次满足条件的值,并返回索引值,未找到返回-1

  15. some在遍历时查找是否满足条件的值一旦找到立刻停止,有返回true,没有返回false

  16. every用于查找元素满足条件,都满足返回true,否则返回false

  17. filter用于筛选满足条件的元素,会把所有满足条件的元素放到新数组当中并返回

  18. map用于遍历数组的每个元素执行一边回调函数,会把执行玩的函数放到新数组中返回

  19. 实例方法 forEach 用于遍历数组,替代 for 循环(🌟)

        <script>
          let arr = ["张飞", "赵云", "关羽", "马超", "黄忠", "貂蝉"];
          //forEach循环,用于遍历数组
          arr.forEach((item, index, x) => {
            //第一个参数代表数组的每一项,当前元素
            console.log(item);
            //第二个参数代表数组每个元素的下标,当前项的索引值
            console.log(index);
            //第三个参数代表当前数组的本身
            console.log(x);
          });
        </script>
    
  20. sort用于排序

    正序排序:arr.sort((a,b)=>{return a-b})

    倒序排列:arr.sort((a,b)=>{return b-a})