JavaScript 数据类型

74 阅读4分钟

JS 有 8 种基础数据类型?几种新增?*

  • undefined null boolean number string object | symbol bigInt

  • symbol 独一无二、不可变

    • 全局变量冲突、内部变量覆盖
  • bigInt 任意精度正数,安全地存储和操作大数据,即便超出 number 的安全整数范围

  • undefined === null // false ,其余全为 true

基础数据类型通常会如何进行分类? ***

原始数据类型

  • undefined null boolean number string

  • 基本类型值存储于栈内存中

    • 按值传递

    • 传递的就是当前值,修改不会影响原有变量的值
    • 先进后出 栈维护结构

    • 栈区由编译器自动分配释放

    • 临时变量方式

    • 空间小、大小固定、操作频繁

引用数据类型

  • 对象、数组、函数

  • 引用类型值也存于栈内存中,指向堆内存当中实际值的一个地址

    • 共享传递

    • 传递传的值是栈内存当中的引用地址,当改变时,改变了堆内存当中的实际值

    • 堆内存由开发者进行分配

    • 直到应用结束

    • 数据量大、大小不固定,赋值给的是地址

基本包装类型

  • ECMAScript 还提供了 3 个特殊的引用类型:Boolean、Number 和String

  • 引用类型与基本包装类型的主要区别就是对象的生存期

  • 在读取模式中访问字符串时,后台都会自动完成下列处理

    1. 创建 String 类型的一个实例

    2. 在实例上调用指定的方法

    3. 立即销毁这个实例

    var s1 = "some text"; 
    var s2 = s1.substring(2);
    ```JavaScript
    
    
  • 不能在运行时为基本类型值添加属性和方法

    var s1 = "some text"; 
    s1.color = "red"; 
    alert(s1.color); //undefined
    
  • Object 构造函数也会像工厂方法一样,根据传入值的类型返回相应基本包装类型的实例

    • 把字符串传给 Object 构造函数,就会创建 String 的实例;而传入数值参数会得到 Number 的实例,传入布尔值参数就会得到 Boolean 的实例
    var obj = new Object("some text"); 
    alert(obj instanceof String); //true
    
  • 用 new 调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的

    var value = "25"; 
    var number = Number(value); //转型函数
    alert(typeof number); //"number" 
    var obj = new Number(value); //构造函数
    alert(typeof obj); //"object"
    

Boolean类型

  • Boolean 类型的实例重写valueOf()方法,返回基本类型值true 或false

    • 重写了toString()方法,返回字符串"true"和"false"
    var booleanObject = new Boolean(true);
     var falseObject = new Boolean(false); 
     var result = falseObject && true; 
     alert(result); //true 
     var falseValue = false; 
     result = falseValue && true; 
     alert(result); //false
    
  • 布尔表达式中的所有对象都会被转换为 true

Number类型

var numberObject = new Number(10);
  • toString()方法
var num = 10; 
alert(num.toString()); //"10" 
alert(num.toString(2)); //"1010" 
alert(num.toString(8)); //"12" 
alert(num.toString(10)); //"10" 
alert(num.toString(16)); //"a"
  • toFixed()方法

    var num = 10; 
    alert(num.toFixed(2)); //"10.00"
    
    具有能够自动舍入的特性
    var num = 10.005; 
    alert(num.toFixed(2)); //"10.01"
    
  • toExponential()方法

    var num = 10; 
    alert(num.toExponential(1)); //"1.0e+1"
    
  • 不建议直接实例化 Number 类型

  • 用typeof 和 instanceof 操作符测试基本类型数值与引用类型数值时,得到的结果完全不同

    var numberObject = new Number(10); 
    var numberValue = 10; 
    alert(typeof numberObject); //"object" 
    alert(typeof numberValue); //"number" 
    alert(numberObject instanceof Number); //true 
    alert(numberValue instanceof Number); //false
    

String类型

var stringObject = new String("hello world");
  • length 属性

    var stringValue = "hello world";
    alert(stringValue.length); //"11"
    

字符方法

  • charAt()和 charCodeAt()

    • ECMAScript 5 :用方括号加数字索引来访问字符串中的特定字符
var stringValue = "hello world"; 
alert(stringValue.charAt(1)); //"e" 
// 字符串"hello world"位置 1 处的字符是"e",因此调用 charAt(1)就返回了"e"。如果你想得到的不是字符而是字符编码,那么就要像下面这样使用 charCodeAt()了
var stringValue = "hello world"; 
alert(stringValue.charCodeAt(1)); //输出"101" 
// 这个例子输出的是"101",也就是小写字母"e"的字符编码

var stringValue = "hello world"; 
alert(stringValue[1]); //"e"

字符串操作方法

  • concat()方法

    • 可以接受任意多个参数,也就是说可以通过它拼接任意多个字符串

    • 实践中使用更多的还是加号操作符(+)

    var stringValue = "hello "; 
    var result = stringValue.concat("world"); 
    alert(result); //"hello world" 
    alert(stringValue); //"hello"
    
    var stringValue2 = "hello "; 
    var result2 = stringValue2.concat("world", "!"); 
    alert(result2); //"hello world!" 
    alert(stringValue2); //"hello"
    
  • slice()、substr()和 substring()

    • 基于子字符串创建新字符串的方法
    var stringValue = "hello world"; 
    alert(stringValue.slice(3)); //"lo world" 
    alert(stringValue.substring(3)); //"lo world" 
    alert(stringValue.substr(3)); //"lo world" 
    alert(stringValue.slice(3, 7)); //"lo w" 
    alert(stringValue.substring(3,7)); //"lo w" 
    alert(stringValue.substr(3, 7)); //"lo worl"
    
  • indexOf()和 lastIndexOf()

    • 从字符串中查找子字符串的方法
    var stringValue = "hello world"; 
    alert(stringValue.indexOf("o")); //4 
    alert(stringValue.lastIndexOf("o")); //7
    
    var stringValue = "hello world"; 
    alert(stringValue.indexOf("o", 6)); //7 
    alert(stringValue.lastIndexOf("o", 6)); //4
    
  • trim()方法

    • 创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果
    var stringValue = " hello world "; 
    var trimmedStringValue = stringValue.trim(); 
    alert(stringValue); //" hello world " 
    alert(trimmedStringValue); //"hello world"
    
  • toUpperCase()、toLowerCase()

    var stringValue = "hello world"; 
    alert(stringValue.toUpperCase()); //"HELLO WORLD" 
    alert(stringValue.toLowerCase()); //"hello world"
    
  • localeCompare()

    var stringValue = "yellow"; 
    alert(stringValue.localeCompare("brick")); //1 
    alert(stringValue.localeCompare("yellow")); //0 
    alert(stringValue.localeCompare("zoo")); //-1
    
  • fromCharCode()

alert(String.fromCharCode(104, 101, 108, 108, 111)); //"hello"

JS基础:基本包装类型_js 基本包装类型_BoomShaKa_S的博客-CSDN博客