JavaScript学习笔记——数据类型

  JavaScript有两种数据类型:简单数据类型(基本数据类型)和复杂数据类型(引用类型)。

  简单数据类型:Nndefined,Null,Boolean,Number和String

  复杂数据类型:object

简单数据类型

  Nndefined

    undefined类型只有一个值,即特殊的undefined。在使用var和let声明变量但未对其加以初始化时,这个变量的值就是undefined。

var msg;
let num;
console.log(msg)    // undefined
console.log(num)    // undefined

console.log(msg == num) // true

var a = undefined
let b = undefined
console.log(a)  // undefined
console.log(b)  // undefined
View Code

 Boolean

  Boolean类型是使用最多的一种类型,该类型只有两个字面值:true和false。这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0.(true和false是区分大小写的)

各数据类型对Boolean类型的转换:

var num1 = 100;
var num2 = 0;
var str1 = 'qwer';
var str2 = '';
var bool1 = false;
var bool2 = true;
var und = undefined;
var nul = null;
var arr1 = [1,2,3];
var arr2 = [];
var obj1 = {};
var obj2 = {a: 1};

console.log(Boolean(num1))  // true
console.log(Boolean(num2))  // false
console.log(Boolean(str1))  // true
console.log(Boolean(str2))  // false
console.log(Boolean(bool1)) // false
console.log(Boolean(bool2)) // true
console.log(Boolean(und))   // false
console.log(Boolean(nul))   // false
console.log(Boolean(arr1))  // true
console.log(Boolean(arr2))  // true
console.log(Boolean(obj1))  // true
console.log(Boolean(obj2))  // true
View Code

 Null 

  Null类型只有一个值,即特殊值null。从逻辑角度来看,null值表示一个空对象指针,这也正是使用typeof操作符检测null值时会返回‘object’的原因。

  如果定义一个空变量准备用来保存对象,那么最好将该变量初始化为null。

 Number

  Number类型有两种类型的数值:整数型和浮点类型

  浮点数值

  所谓的浮点类型,就是该数值必须包含一个小数点,并且小数点后面必须至少有一位数字。

  var float1 = 1.01

  var float2 = 0.1

  var float3 = .3  // 有效,但不推荐

  由于保存浮点数值需要的内存空间是保存整数值得两倍,因此ECMAScript会将浮点数值转换为整数值。如果小数点后没有跟任何数字,那么这个数值就可以作为整数来保存。如果浮点数值本身表示的就是一个整数,那么该值也会被转换成整数。

  对于那些极大或极小值,可以使用科学计数法表示(e)。用e表示法表示的数值等于e前面的数值乘以10的指数次幂(e后面的数值)

  var num = 3.2345e7  // 32345000

 数值范围

  由于内存限制,ECMAScript并不能保存世界上所有的数值,能保存的最小数值是5e-324,最大数值是1.7976931348623157e+308。如果超过最大值则会被自动转化为Infinity,小于最小值会被转化为-Infinity。他们将不再参与下一次的计算。

 NaN

  NaN,即非数值是一个特殊的数值,这个值用于表示一个本来要返回数值的操作数未返回数值的情况。涉及到NaN的操作都会返回NaN,其次,NaN与任何值都不相等,包括本身。

  数值转换

  有三个函数可以把非数值转换为数值1:Number()、parseInt()和parseFloat()。第一个函数可以用于任何数据类型的转换,另外两个函数专门用于把字符串转换成数值。

  Number()的转换规则:

  • 如果是Boolean值,true和false分别被转化为1和0
  • 如果是数字值,只是单纯的传入和返回
  • 如果是null,返回0
  • 如果是nudefind,返回NaN
  • 如果是字符串:只包含数字且前面没有0,将其转换为数值返回,有0将忽略前导的0,返回后面的数值;如果是十六进制的格式将转换为同大小的十进制数值;空字符串,则将其转化为0;如果包含除上述格式外的其他字符串,则将其转换为NaN
  • 如果是对象,则调用对象的valueOf()方法,然后依赖前面的规则转换。如果转换的结果是NaN,则调用toString()方法,在依次按照前面的规则转换。

  parseInt()在转换字符串的时候,更多是看其是否符合数值模式,他会忽略字符串前面的空格,知道找到第一个非空字符。如果第一个字符不是数字字符或负号,将返回NaN,如果第一个字符是数字字符,将继续解析下面的字符,直至解析完所有的字符或者遇到一个非数字字符。

  

var num1 = parseInt('12345hjk');    // 12345
var num2 = parseInt('');            // NaN
var num3 = parseInt('0xA');         // 10
var num4 = parseInt(22.2);          // 22
var num5 = parseInt('070');         // 70
var num6 = parseInt('70');          // 70
var num7 = parseInt('0xf');         // 15
View Code

  String

    String类型多由0个或多个16位的Unicode字符逐层的字符序列。字符串可以有单引号或双引号表示。

  字符字面量

字面量 含义
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号

  字符串特点:字符串是不可变得,字符串一旦创建,他们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后在把新的字符串赋值给这个变量。

  如果要把其他类型的值转换成字符串,可以使用toString()方法。null和undefined类型的值不可以使用。但是可以使用String()方法

  Object

     在ECMAScript中对象就是一组数据和功能的集合。对象的创建方法有两种,第一种是通过new关键字后跟要创建的对象类型的名称来创建,第二种是直接给变量赋上一个空的对象或数组。

  var o = new Object()

  object的每一个实例都具有一下的方法和属性:

  • Constructor:保存着用于创建当前对象的函数。o的构造函数就是Object()
  • hasOwnProperty():用于检查给定的属性在当前的实例中是否存在。
  • isPrototypeOf():用于检查传入的对象是否是另一个对象的原型
  • propertyIsEnumerable():用于检查给定的属性是否能被for-in语句来枚举
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串、数值或布尔值表示。

  Symbol

    Symbol类型是es6新添加的一种基本类型的数据,它表示的是独一无二的值。它通过symbol函数来生成,凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

  数据类型的检测

    要想检测一个变量是基本数据类型或者是复杂数据类型可以使用typeof进行检测。使用typeof检测数据类型时null、对象和数组都是返回的object

var a = null            // object
var b = 12              // number
var c = '123'           // string
var d = true            // boolean
var e = undefined       // undefined
var f = new Object()    // object
var g = Symbol()        // symbol
var h = new Array()     // object


console.log(typeof a)
console.log(typeof b)
console.log(typeof c)
console.log(typeof d)
console.log(typeof e)
console.log(typeof f)
console.log(typeof g)
console.log(typeof h)


console.log(h instanceof Array) // true

console.log(f instanceof Object)    // true

console.log(a instanceof Object)    // false

console.log(h instanceof Object)    // true
View Code

猜你喜欢

转载自www.cnblogs.com/peiyanh/p/9558846.html