JS基础(数据类型)

简介

任何一门语言,其最重要的基础莫过于这门语言对于数据的处理方式,语法只是用法,我们更需要深入了解一门语言关于地址,变量,传值,回收,顺序等等性质,这对于我们构建健硕的代码具有重要的作用。也能大大增加语言的安全性。

JS的数据类型

在这里插入图片描述

上述内容来自权威指南

其中对象的范围很广,函数,数组均是一种特殊的对象,又由于class(类)是又构造函数带来的

基础数据类型

Number

JS中,数字是一个很重要的数据类型,它涵盖了浮点数,整数等等。

js不区分浮点数和整数,使用IEEE 754标准定义的64位浮点数(实际操作是基于32位的),和其他语言一样,js浮点数也是不精准的,存在误差,毕竟是二进制表达法,而且实数是无限的,自然不可能用64位就轻松表示出来。(连0.1都表达不精准)

由于number是64位的,因此表示范围如下:

1.79 E+308, 5 E-304

-2^53 , 2^53,安全整数,意味着要one by one

数字的高级算术运算可以通过调用Math实现,而且要注意,溢出了也不会报错,有一个无穷大的值:正负infinity,无限接近于0则返回负零,如果不是数字,那就变成NaN。

String

字符串是一组由16位字符组成的不可变有序序列,每个字符都来自于Unicode字符集。

有些字符不能够用16位表示的需要2个16位值表示,这种论外,特殊情况特殊处理。

string是不可变的,这意味着string是不能够修改值的,其修改,本质上其实是重新创建。

常用方法:charAt,substring(substr功能一样,但是参数不一样,前者是两个下标,后者是下标+长度,slice功能也一样,但是slice可以取负数),indexOf,split,replace

正则表达式比较难,建议单独学习。

Boolean

布尔值

包装方法:toString

null

这个用来代表空值,typeof为“object”,是一个特殊对象,含义是非对象

undefined

这个更深层次的空值,typeof为“undefined”,代表这个值就没有给出过值。与null不一样的是,null是有值,只不过这个值是空的。他不是一个对象。

对象类型

数组,函数均是特殊对象类型,而且普通数据类型也有对应的对象包装。这也是为什么这些数据类型可以调用方法的原因。

比如说string调用substr时,本质上系统是new了一个string对象,这个对象会调用substr方法,然后调用完就销毁掉这个对象。

由于null和undefined没有包装对象,所以没有方法,判断类型要用Object原生方法,当然,typeof也可以判断一些类型(可以判断undefined),instanceof也可以判断类型。

下面给个有趣的,理解透了应该就熟悉了:(关于null和undefined的,可以自己实验)

var a = new Number(1);
console.log(a instanceof Object);//true
var b = Number(1);
console.log(b instanceof Object);//false
var c = [1,2];
console.log(Object.prototype.toString.call(c));//[object Array]

Array

js中的数组是一种特殊的对象,无声明的值为undefined(例如[1,2,2]),js中数组元素没有类型限制,比较方便。

数组判断类型可以用isArray函数。

在这里插入图片描述

如上,类似的结构,有一种叫伪数组的东西,区别是没有原生方法,foreach不能遍历伪数组。

还有一点比较有趣,对于一个数组,我们可以忽略其长度,对超过长度的索引赋值,结果就是数组被强行扩充了,多出来的空位甚至连索引都没有(不是undefined)

常用方法:sort() splice() slice() push() pop() unshift() shift()等

ES5: foreach() map() filter() 等

Function

function说实话应该从对象那里独立出来,比较js给了那么多特定的语法和功能了。所以千万不要把对象那一套搬在function上使用。有些思路倒是可以靠着函数与对象之间的关系进行分析,特别是原型链,这个在我前面的文章有讲过。简单来说,就是所有对象都有其__proto__所在,它指向产生这个对象的原型,而所有函数都有prototype,它们也有一个__proto__存在,它指向产生这个函数的原型。你会发现,函数的原型居然是Object()!可以说,在js里,对象就是万物起源。

先说说区别,普通对象是没有prototype的,只有函数有。普通对象有__proto__,但是函数没有,函数的原型才有。(换句话说,函数的原型就是一个普通对象),函数通过这个原型获得了很多便利。

new操作符,其实就是一个简写,把创建空对象,原型链指向,this定向,返回对象的操作一并给做了。

型才有。(换句话说,函数的原型就是一个普通对象),函数通过这个原型获得了很多便利。

new操作符,其实就是一个简写,把创建空对象,原型链指向,this定向,返回对象的操作一并给做了。

总结

很多东西挖细了都挺难的,js是一门非常特殊的语言,和c++等语言差距十分巨大,特别是类型上,js的可操作性极强,十分灵活(这也是为什么js框架那么多的原因)

发布了28 篇原创文章 · 获赞 0 · 访问量 924
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览