JS 里的数据类型
数据类型
JavaScript 的数据类型常见的有6种, 分别为undefined、null、布尔值 (boolean)、数值 (number)、字符串 (string)、对象 (object) Symbol (ES6 新增), 其中Symbol为新增的第7种. 由于刚接触js, 这里我们暂时只讨论前6种。简单类型应该分为:undefined、null、boolean、number、string, 复杂类型包括:object
☛typeof运算符
typeof可以检测变量或者参数的类型,特例是:typeof null返回'object',typeof 函数返回'function'
☛数值 (number)
Number
JavaScript 内部,所有数字都是以64位浮点数形式储存,整数也是这样。所以,1与1.0是相同的,是同一个数。由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
数值的精度及大小
根据国际标准 IEEE 754,JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的。
第1位:符号位,0表示正数,1表示负数
第2位到第12位 (共11位):指数部分
第13位到第64位 (共52位):小数部分 (即有效数字)
符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度。
数值的进制
十进制 11 //11
二进制 0b11 //3
八进制 0o11 //9
十六进制 0x11 //17
isNaN(n)
数值转换
Number(n) 强制的把一个值强制的转为数字类型,如果遇到字符串转不了,则返回NaN。
/*var topVal = "28px";
//这时候是字符串减去数值,返回值是NaN
console.log(topVal-10);
*/
// parseInt操作的字符串必须以数字开头,把数字在前的字符串强制转为数值,有几位提取几位,直到遇到非数字,如果为非数字开头,则返回NaN
var topVal = parseInt("28px")
console.log(topVal-10);// 返回时18
ParseInt操作的字符串如果以数字开头,则会把数字在前的字符串强制转为数值,有几位提取几位,直到遇到非数字,如果为非数字开头,则返回NaN
☛字符串 (string)
//方法一
var ids = 78965;
var idstr = ids.toString();
console.log(typeof idstr); //这时候78965就已经变成了字符串string
//方法二
console.log(string(ids));//尽量用这个方法
字符串就是放在单引号或双引号之中的字符。
反斜杠 ()用来表示一些特殊字符,比如:\n 表示换行符
字符集
JavaScript 使用 Unicode 字符集。允许直接在程序中使用 Unicode 码点表示字符,输出给用户的时候,所有字符都会转成字面形式。
JavaScript 的单位字符长度固定为16位长度,即2个字节。但是,UTF-16 有两种长度:对于码点在U+0000到U+FFFF之间的字符,长度为16位 (即2个字节);对于码点在U+10000到U+10FFFF之间的字符,长度为32位 (即4个字节),对于码点在U+10000到U+10FFFF之间的字符,JavaScript 总是认为它们是两个字符。
Base64转码
Base64 可以将任意值转成 0~9、A~Z、a-z、+和/这64个字符组成的可打印字符。
btoa():任意值转为 Base64 编码
atob():Base64 编码转为原来的值
☛布尔值 (boolean)
布尔值只有true和false这两个值。如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。undefined、null、false、0、NaN、""或'' (空字符串)这六个值会被转为false,其他值都为true。特别注意:空数组[]和空对象{}都为true。
number、string、boolean这三种类型为原始类型,object为合成类型,一个对象往往是多个原始类型的值的合成,null和undefined是两个特殊值。
☛undefined和null
都表示没有值。
1.(规范)如果一个变量没有被赋值,那么这个变量的值就是undefined。
2.(习俗)如果你想表示一个还没有被赋值的对象,就用null,如果你想表示一个还没被赋值的字符串/数字/布尔/symbol就用undefined(直接var a;就行了,不用写var a = undefined; )
undefined 的类型只有一个值,即特殊值,即特殊的undefined, 表示"未定义",转为数值时为NaN。
NaN不等于NaN!!!如果想声明一个变量的类型是undefined 直接var 变量 变量不赋值即可。
null与undefined都可以表示“空”,非常相似。区别在于:null是一个表示“空”的对象,转为数值时为0;
☛对象
对象就是一组“键值对” (key-value)的集合,是一种无序的复合数据集合。它的值可以是任意的数据类型包括对象自身,下图是一个对象:
读取对象值的方法
1.obj.key:
2.obj['key']:
对象的所有键名都是字符串
读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。请注意,如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
查看一个对象本身的所有属性,可以使用Object.keys方法
属性是否存在:in运算符用于检查对象是否包含某个属性。in运算符的一个问题是,它不能识别哪些属性是对象自身的,哪些属性是继承的。可以使用对象的hasOwnProperty方法判断一下,是否为对象自身的属性。
for...in循环用来遍历一个对象的全部属性。
它遍历的是对象所有可遍历 (enumerable)的属性,会跳过不可遍历的属性。
它不仅遍历对象自身的属性,还遍历继承的属性。
1.对象对面可以有对象。
2.object的key一律是字符串,不存在其他类型的key。
3.object['']是合法的。
4.object['name']可以写做object[name],注意object.key和object[key]不同
5.删除对象中的某一项 delete object[‘key’] 直接删除整项包括键名
对象内使用delete删除的是键名+键值(使用in查询不到键名),而将键 值设置为undefined,键名还是依然存在的(可以通过in查询到)。
6.读取两种方式:object.key object["key"] 如果key为3+3的形式,会自动运算后再取值。
7.查询一个键是否在对象内 键名 in 对象