数据类型分为:数值Number,字符串String,布尔值Boolean,Symbol,Null,Undefined,对象Object
其中,数值,字符串,布尔值为原始类型
对象是最复杂的数据类型,又可以分成三个子类型。
1.狭义的对象(object)
2.数组(array)
3.函数(function)
1.判断数据类型
用typeof运算符判断数据类型,像数值、字符串、布尔值就会分别返回number、string、boolean。
注意以下几个案例的typeof的返回值,比较特殊
typeof undefined //undefined
typeof null //object
typeof fn //function
2.Number
浮点数
JavaScript内部使用64位浮点数,如遇到只有整数才能完成的运算,则转为32位整数。
由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
范围精度:-2^53 ~2^53
数值范围 2^-1023 ~2^1024
表示方式:
var a = 1
var a = .1
var a = 1.23e2
Ob11 //二进制
011 //八进制
0x11 //十六进制
特殊数值:
(1)+0与-0
除了做分母分别返回 + Infinity/-Infinity 外,二者可以看作相等。
(2)NaN
表示“非数字”,属于Number,不等于任何值。不论怎么算,都返回一个NaN。
tips 0/0 // NaN
(3)Infinity
使用场景:值过大/值过小/0做分母
与数值相关的全局方法:
(1)parseInt()
基本用法:
1.将字符串转换为整数(一个个依次转,转到不能转为止)
2.接受第二个参数表示进制
parseInt('1000',2) //8
(2)parseFloat()
基本用法:
1.用于将字符串转换为浮点数(一个一个依次转,转到不能转为止)
2.当转换的目标不是字符串(如{})/第一个不能转换为浮点数(如'FF2')/空 的时候,返回NaN
(3)isNaN
用于判断值是否为NaN,只对数值有效。(不是数值?转!)
tips:判断NaN可以利用其唯一不等于自身的特点
function myIsNaN(Value){
return value !==value;}
3.String
每个字符在JS中以 16 位 UTF-16 格式储存,也就是说,JavaScript 的单位字符长度固定为16位长度,即2个字节。比如四字节字符𝌆,浏览器会正确识别这是一个字符,但是 JavaScript 无法识别,会认为这是两个字符。
String表示举例:
var a = 'Hi'
var a = "Hi"
var a = '' //长度为0
var a = ' ' //加空格,长度为1
多行字符串
(1)将一个字符串分成三行写,JavaScript 就会报错。如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。
但是如果在\后面有空格,浏览器就会报错,而我们却看不出来,容易产生BUG,推荐使用第二种方法。
(2)连接运算符(+)可以连接多个单行字符串,将长字符串拆成多行书写,输出的时候也是单行。
var longString = 'Long '
+ 'long '
+ 'long '
+ 'string';
(3)键盘1旁边的反引号
ES6新增支持这种写法,更简便,可读性没有明显提高。
var s = `Hello
World`
字符串转义
反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
\0 :null
\b :后退
\f :换页
\n :换行
\r :回车
\t :制表符
\v :垂直制表符
' :'
\ :
如果在非特殊字符前面使用反斜杠,则反斜杠会被省略。
字符串的长度
.length属性返回字符串的长度,该属性也是无法改变的。
'\t\n1' 的 length 为 3
'\"' 的 length 为 1
4.Null和Undefined
都表示“没有”。区别在于null是一个表示“空”的玩意,转换数值为0,undefined是一个表示“此处无定义”的原始值,转换后为NaN。
Null典型场景:
1.有一个对象object,现在还不想赋值
Undefined典型场景
1.有一个变量,没有被赋值
2.有一个非对象,不想赋值
3.调用函数,应该提供的参数未提供
4.函数没有返回值时,返回
5.Boolean
两个值,true/false。
两元逻辑运算符: && (And),|| (Or)
前置逻辑运算符: ! (Not)
相等运算符:===,!==,==,!=
比较运算符:>,>=,<,<=
6.Object(复杂类型)
是一组键值对的集合(key-value)
是一种无序的复合数据集合。
关于键值对
是键名加键值的组合,其中,键名全是字符串,可以是空字符''。
'中文' '9a' 'a b' 这种特殊的,必须加单引号,如果不想加,那么你的键名就要符合标识符规范。
Delete删除Key
可以利用delete删除key。删除后,无key也无value
属性的操作
(1)读取对象的属性
1.点运算 obj.p
2.方括号 obj['p']
注意,如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符。
(2)查看对象属性
查看一个对象本身的所有属性,可以使用Object.keys方法。
var obj = {
key1: 1,
key2: 2
};
Object.keys(obj);
// ['key1', 'key2']
(3)判断是否存在 in
in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。
(4)属性的遍历 for...in
for...in循环用来遍历一个对象的全部属性。
var obj = {a: 1, b: 2, c: 3};
for (var i in obj) {
console.log(obj[i]);
}
// 1
// 2
// 3
for...in循环有两个使用注意点。
1.它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
2.它不仅遍历对象自身的属性,还遍历继承的属性。
网友评论