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
-
引用类型与基本包装类型的主要区别就是对象的生存期
-
在读取模式中访问字符串时,后台都会自动完成下列处理
-
创建 String 类型的一个实例
-
在实例上调用指定的方法
-
立即销毁这个实例
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")); //7var 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"