javascript 之数据类型–01

写在前边

国庆整理素材时,发现刚起先入门前端时读书JS
的材料,打算以一个基础入门博客记录下来,有不写不对的多多指教;

先引进些书本给急需的童鞋

《JavaScript 高级程序设计.pdf》第三版

 《JavaScript权威指南(第六版).pdf》

《高性能javascript.pdf》

《JavaScript语言精粹—高清版.pdf》

《你不精晓的JavaScript(上卷).pdf》

《你不理解的JavaScript(中卷).pdf》

数据类型

ECMAScript
中数据类型分为焦点数据类型,复杂数据类型也号称引用数据类型,即常说的对象;

主干数据类型是简简单单的数据段,包括
String、Number、Boolean、Null、Undefined。

引用数据类型是由一组无序的名值对构成 如 Object;

焦点数据类型

1、Undefined 类型

 Undefined 类型只有一个值,即 undefined。以下情状的值会是 undefined
(1)变量被声称了,但从未赋值,默认值为undefined。
(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的性能,该属性的值为undefined。
(4)函数没有重回值时,默认重回undefined。
(5)未定义的变量使用typeof 再次回到undefined(严苛形式下报错)。

<script>
    var a;
    console.log(a);//undefined
    function f(a, b, c) {
        console.log(c)//undefined
    }
    f(1, 2); //未传递的实参

    function fo(){}
    console.log(fo());//没有明确返回值,默认返回undefined
</script>

2、Null 类型

Null 只有一个值
null,null是javascript语言的机要字,它象征一个与众不同值,常用来讲述”空值”,从逻辑角度来看,null
是一个空对象指针;通常要把一个变量来保存对象,那么最好将变量起始化为null;

[注意]null是空对象指针,而[]是空数组,{}是空对象,三者不雷同;

null与undefined 都是表示无、不设有,那么为啥会同时存在吗?

1、一起始null像在Java、.net里同样,被当成一个目的。但是javascript的值分成原始类型和对象类型两大类,作者认为基本项目表示”无”的值最好不是目标。
2、javascript的最初版本没有包括错误处理机制,暴发数据类型不匹配时,往往是机动转换类型或者默默地退步。作者认为一旦null自动转为0,很不便于发现错误;

null 与undefined 区别又是怎么呢?

眼下的话,null和undefined基本是一律的,都是象征无,只是采纳场景不太雷同 如:

null表示”没有目的”,即该处不应有有值。典型用法是:

  • 作为函数的参数,表示该函数的参数不是目标。
  • 作为目的原型链的顶峰。

undefined代表”紧缺值”,就是此处应该有一个值,不过还尚未定义/起头化。典型用法是:

  • 变量被声称了,但未曾赋值,默认值为undefined。
  • 调用函数时,应该提供的参数没有提供,该参数等于undefined。
  • 目的没有赋值的特性,该属性的值为undefined。
  • 函数没有重回值时,默认再次回到undefined。
  • 未定义的变量使用typeof 再次来到undefined(严苛形式下报错)。

(typeof null) //返回object 误区

在 JavaScript 最初的实现中,JavaScript
中的值是由一个表示项目标标签和实际数据值表示的。对象的花色标签是0。由于
null 被规划成空指针(大多数平台下值为0x00),由此,null的系列标签也成为了0,typeof
null就荒唐的回来了”object”.(referenc) 唯独一旦修复了
会造成大气旧的js不匹配;

这一场景有待于在ECMAScript 6中被修复 (该提出已被否定). 正确的重临值将改为
typeof null === ‘null’.

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof 

3、Boolean 类型

Boolean 布尔档次有 true、false。在js中是分别轻重缓急写的,即 True、False
并不是Boolean的值,即使Boolean
只有这七个值,然则在js中任何数据类型的值调用Boolean()函数,都能回去一个Boolean值;只要记住如下规则即可:(0,-0,NaN,”,null,undefined)这多少个永远为false,另外都为true

<script>
    var message = 'ds';
    if (message) {
        console.log('成功'+message)// 成功ds
    }
    var obj={};
    if(obj){
        console.log('成功'+obj)// 成功[object Object]
    }
    var a=0;
    if(a){
        console.log('成功'+a);
    }else{
        console.log('失败'+a)// 失败0
    }

</script>

4、Number 类型

在js中采纳Number 类型来表示整数与浮点数(数值必须包含一个小数点);

var intNum=66; //整数
var floatNum=1.1 //浮点数

万一某次总括的结果超过了Javascript 数值范围(Number.MAX_VALUE 最大值
Number.MIX_VALUE)那么这么些结果就会自动转为Infinity,假诺这么些数值是负数会转为-Infinity(负无穷),即便是正数会转为Infinity(正无穷)

NaN:非数值(Not a
Number)是一个破例的值,表示这里本应该是一个数值,但是并不是数值; 如

 var a=10,b='str';
    console.log(a*b);//NaN

NaN 具有如下特点:
1、任何与NaN的操作都是回来NaN;
2、NaN与另外值都不等于;  

<script>
    var a = 10, b = 'str';
    console.log(a * b);//NaN

    console.log(NaN == NaN)//false
    console.log(NaN === NaN)//false
    console.log(NaN == 'str')//false
</script>

针对NaN的两个特征,ECMAScript定义了
isNaN()函数来确定某个变量/表达式结果是不是NaN,这么些函数会尝试把变量转换为数值,假诺不可以更换则赶回true,反正重临false;  

<script>

    console.log(isNaN('red'));//true 不能转换number
    console.log(isNaN('10'));//false 能转换number
    console.log(isNaN(10));//false 能转换number
    console.log(isNaN(false));//false 能转换number
    console.log(isNaN(true));//false 能转换number

    console.log(isNaN(''));//false 能转换number  0
    console.log(isNaN(undefined));//true 不能转换number
    console.log(isNaN('undefined'));//true 不能转换number
    console.log(isNaN(null));//false 能转换number 0
    console.log(isNaN('null'));//true 不能转换number

</script>

typeof 基本数据类型检查

<script>
    var s = 'name';
    console.log(typeof s)//string
</script>

typeof                            重返以下字符串

undefined                      这么些变量未定义、未伊始化
object                            这一个变量是目的或者是null
boolean                         那一个变量是布尔值
number                          这么些变量是数值
string                             这一个变量是字符串
function                         那些变量是函数

引用数据类型

引用类型是一种用于将数据和效率集团在联名的数据结构(也常被成为类),引用类型的值(对象)是引用类型的一个实例。不过js中尚无类的概念,因而引用类型也足以被喻为对象,因为她们讲述的是性质和措施的聚合;
ECMAScript提供了广大原生引用类型(如:Object)

Object类型

我们看看的大部引用类型都是Object类型的实例,Object的实例本身不富有很多效率,但对于在应用程序中储存和传输数据而言,是这个精粹的抉择。

Array类型

除了Object之外,Array算是js最常用最常用的花色。js中的数组与此外语言的数组都是数额的有连串表,因为js是弱类型,所以js中数组的每一项可以保存任何类型的多少;

Date类型

js中用于构建日期对象的引用类型

RegExp类型

js通过RegExp类型来援助正则表达式

Function类型

js中的function实际上是目的,每个函数都是Function类型的实例,而且都与其余引用类型一样享有属性和章程。由于函数是目标,由此函数名实际上也是一个针对函数对象的指针;

引用类型提供的属性以及艺术这里不在叙述,不明了的可以参照如下连接

http://www.w3school.com.cn/jsref/jsref\_obj\_array.asp

instanceof  检测某个实例的实际品种 

语法:

object instanceof constructor

描述:
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object
的原型链上。
可以精通为 instanceof 用于判断某个实例(对象)是否是某个项目标实例;  

var a=new Array();
alert(a instanceof Array);//true,
alert(a instanceof Object)也会返回true;这是因为Array是object的子类。

再如:
function test(){};
var a=new test();
alert(a instanceof test)会返回true。