资讯专栏INFORMATION COLUMN

数据类型

xavier / 3431人阅读

摘要:,通过原型上的方法,判断对象所属类型数据的操作方法基本数据类型的所有方法操作都不改变原始值。对象类型的数据,操作过程中始终留意引用地址的中转概念,其原型上方法有会改变和不改变原值的两种类型。

数据类型分类

基础类型:string,number,boolean,undefined,null,symbol

对象类型:object

基础类型为原始值,其值不能被修改;对象类型为引用类型,可以理解为指针,通过引用类型找到内存中的地址,然后再进行相关操作。

// 基本类型
var a = 10;
var b = a ;
a = 20;
console.log(b); // 10

// 对象类型
var c = { name:"hello"};
var d = c ;
c.name = "world";
console.log(d.name); // "world"
数据的创建 string
var str1 = "hello";
var str2 = new String("hello");
var str3 = `${"hello"}abc`

// 其他类型转换成字符串
["h","e","l","l","o"].join(""); // "hello"
var num = 123;
num += "";
num.toString(); 
String(num); // "123"
String(true); // "true"
number
var num1 = 123;
var num2 = new Number(123);

var num3 = parseInt("12px"); // 12
var num4 = parseFloat("12.22px"); // 12.22
var num5 = Number("123");
boolean
var boo1 = true;
var boo2 = New Boolean(true);

var a = 1;
var boo2 = !!a; // true
undefined
var undef = undefined;
var a; 
a; // undefined
数据类型判断

typeof,获取值的所属类型以字符串形式返回

typeof "hello"; // "string"
typeof 123; // "number"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" (特例1)
typeof Symbol("hello"); // "symbol"

typeof {a:1} ; // "object"
typeof function(){}; // "function" (特例2)
特例1,属于基础类型的 null 经过 typeof 操作符操作后返回的是 object;特例2,函数隶属于对象,typeof 操作直接返回 function

instanceof,可以判断通过 new 操作符生成的各种数据类型

var str = "hello";
str instanceof String ; // false
new String("hello") instanceof String; // true

// number,booelan 同理,(null,undefined,symbol没有构造函数)
123 instanceof Number; // false
new Number(123) instanceof Number ; // true

true instanceof Boolean; // false
new Boolean(true) instanceof Boolean; // true
instanceof 的实质是,判断 instanceof 左边对象的原型是不是在右边对象的原型链中。

toString,通过 Object 原型上的 toString 方法,判断对象所属类型

Object.prototype.toString.call("hello"); // "[object String]"
Object.prototype.toString.call(123); // "[object Number]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(Symbol("hi")); // "[object Symbol]"

Object.prototype.toString.call(function(){}); // "[object Function]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(new Date()); // "[object Date]"
Object.prototype.toString.call(/w+/); // "[object RegExp]"
Object.prototype.toString.call({}); // "[object Object]"
数据的操作方法
基本数据类型的所有方法操作都不改变原始值。

对象类型的数据,操作过程中始终留意引用地址的中转概念,其原型上方法有会改变和不改变原值的两种类型。

// 基本类型
var str = "hello";
str.toUpperCase(); // 仅返回值为 "HELLO",并不是直接在原值上修改
console.log(str); // "hello"

// 对象类型
// 改变值
var arr1 = [1,2,3];
arr1.push(4); 
arr1; // [1,2,3,4]

// 不改变值
var arr2 = [5,6,7];
arr2.concat(arr1); // 返回 [5,6,7,1,2,3,4]
arr2; // [5,6,7]

// 引用地址示例
var arr3 = [8,9]; // arr3 实则对应的是内存中 [8,9] 数组的引用地址,比如 x0001
var arr4 = arr3; // arr4 为 arr3 的值,即为 x0001
arr4[0]= 10; // 在对地址进行操作和读值时,则又通过引用找到对应的区域进行读写操作
arr3; // [10,9]
引用类型可以简单地类比成计算机中的快捷方式。

常用又较容易混淆的操作方法:

String

剪切

方法名 说明
slice(start,end) start和end都可以为负数,皆代表位置索引,从start往字符串右边向剪切,end位置若在start左边,则返回为空,
substr(start,length) start可为负,表示定位到剪切的起始位置,length需为正数,表示从起始位置往右截取的长度。
substring(index1,index2) Index1 和 index2 都为正数皆代表位置索引,两者无序即总是取两者之间的字符
Number

toFixed(length),返回字符串;仅对小数点位后,做特定长度的截取,不够长度则补0,四舍五入。

var num = 123.5368;
num.toFixed(2); // "123.54"
num.toFixed(1); // "123.5"
num.toFixed(6); // "123.536800"
Array

slice 和 splice

方法名 说明
slice(start,end) start和end都可以为负数,皆代表位置索引,从start元素往数组右边浅拷贝,不包括end位置元素,end 位置若在 start 左边,则返回空数组(类似字符串的slice),操作不影响原数组。
splice(start,len,…eles) start代表索引位置,可为负;len表示要删除的个数,eles 表示要在删除的位置中插入的元素,可多个。操作会影响到原数组。返回的为删除的元素数组。
var arr = [1,2,3,4,5,6,7,8];

// slice 
arr.slice(-4,-1); // [5,6,7]

// splice
var data = arr.splice(0,1,99); 
arr; // [99,2,3,4,5,6,7,8]
data; // [1]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104890.html

相关文章

  • 数据类型——数据类型简介及之间的转换

    摘要:二类型转换隐式类型转换转换为字符串类型任意类型转换为类型任意类型一个加号加任意类型转换为类型任意类型显式类型转换转换为字符串类型转换为类型将字符串或布尔值转换为整数类型。 内容简介: 一.数据类型简介 ———— 原始类型 ———— 引用类型 二.数据类型之间的转换 一、数据类型简介 数据类型主要分为原始类型(也有称为基本类型/原始值)和引用类型。 1.原...

    codercao 评论0 收藏0
  • JS专题之数据类型类型检测

    摘要:运算符可以用来检测某个构造函数的属性是否存在于另外一个要检测对象的原型链上。使用方法可以获取到变量的准确的数据类型就能解决基本包装类型的检测错误和的检测不安全。 本文共 1750 字,读完只需 7 分钟 数据类型有哪些? ECMAScript 的数据类型分为简单数据类型(也被称为基本数据类型,原始数据类型): Undefined Null String Number Boolean ...

    since1986 评论0 收藏0
  • 深入Mysql - 谈谈我对数据类型的认识

    摘要:要确保没有低估需要存储的值的范围,更小是相对与数据类型的最大值范围来讲的。如果无法确定哪个数据类型是最好的,就选择你认为不会超过范围的最小类型。整数类型有两个类型的数字整数和实数。列默认为,这与其他的数据类型不一样。 简述 良好的逻辑设计和物理设计是高性能系统的基石,比如反范式设计可以加快某些类型的查询同时也会影响另外一些类型的查询效率,所以我们必须重视Mysql对于数据库的设计(本...

    SillyMonkey 评论0 收藏0

发表评论

0条评论

xavier

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<