我爱编程

JS基础系列(一): JS里的数据

2018-03-26  本文已影响0人  squall1744

JS数据类型


number类型


number就是数字类型, 支持多种写法

十进制

整数 1 2 3 4 5 6 7 8 100
小数 1.1 2.3 0.125 4.235 .5 .6 .7
科学计数法 1.35e2表示135

二进制

0b10 0b11 0b1101

八进制

0b10 0b12

十六进制

0xff 0x11 0x4a

string类型


单行字符串

''或者""包含的数值, 如
'abc'表示字符串abc
'10' 表示字符串10, 并非数字10
"d23"表示字符串d23
''引号之间什么都不加表示空字符串, 长度为0
' '引号中间有空表表示一个空格字符串, 长度为1, 这点需要注意

字符串转义

某些特殊的字符会产生歧义, 这时候我们需要用转义符来表示, 比如

我们需要表示一个'单引号字符串,如果直接输入三个引号''' , JS就会不知道该怎么解析, 到底是前两个引号是一组, 最后一个是另外一个引号还是第一个和第三个是一组, 中间的是字符串, 通常情况下, JS对这种情况会解析为前两个是一组引号, 最后一个是多余的单引号,这样会报错, 这种情况下, 就需要借助转义符了

我们用\后面跟一个字符表示转义,比如刚才的情况, 我们可以下写成'\'', 这样JS就会把\后面紧跟的那个符号解析成字符了

这里需要注意\'的长为1, \不占长度的

下面列出JS常用转义符

符号 功能
\' 单引号字符串
\" 双引号字符串
\& 和号字符串
\\ 反斜杠字符串
\n 换行
\r 回车
\t 制表
\b 退格
\f 换页

多行字符串

当我们需要输入多行字符串的时候我们可以用以下方法

let a = '12334\
dfdfdfdsf\
fdfddf'

let b = "dffdfdf\
ddf1111\
dfdffdf"

这里需要注意\后面必须紧跟着输入回车键, 不能有空格等任何字符, 不然JS会报错

模板字符串

ES6引入了模板字符串, 这个使得字符串更容易输出了

模板字符串使用两个``符号(键盘上数字1旁边那个键)包裹字符串,

比如上面的多行字符串, 我们可以不用转义符号

let a = `asdfd
cvvbf`

这里有个坑, a的长度是11, 因为回车也被认为是一个字符

模板字符串里还可以包含变量, 变量在模板字符串中用${变量名}表示

let a = 'hello'

let b =`${a} world`

//输出结果为hello world

boolean类型


boolean只有两个值truefalse, 用来判断逻辑真和假的值, 比如我们常用的if语句的判断条件

let a =3 
if(a < 3) {
  console.log(1)
} else if(a>2) {
  console.log(2)
}

//打印出2, 因为a<3的值是false, a>2的值为true所以执行条件为a>2的语句

&&||

&&表示逻辑与, 表达式中有一个值为false, 则整个表达式的值为false

true && true = true
true && false = false
false && false = false

||表示逻辑或, 表达式中有一个值为true, 整个表达式的值为true

true || true = true
true || false = true
false || false = false

null类型和undefined类型


这两个类型都是只有一个值, 都表示什么也没有, 为什么表示什么也没有会有两个值呢, 大家可以理解为这是js设计的一个bug, 下面来说下这两个值得细微差别

请记住上面三点即可

object类型


object就是对象, 表示一个哈希表, 对象里面可以包含若干个简单类型及复杂类型的键值对

let obj = {
  name: 'Adam',  //string类型
  age: 25,  //number类型
  gender: 'male' //string类型
}

obj.name //输出Adam
obj.age //输出25
obj.job //输出undefined, 没有定义
obj['name'] //等同于obj.name, 输出Adam

上面的例子应该很好理解, 但是这里有一个需要注意的obj.name中的name并不是变量而是字符串实际上就是'name', 假设我们有以下代码

let a = 'name'
let obj = {
  name: 'Adam', 
  age: 25, 
  gender: 'male' 
}
obj.a // 这里打出的是undefined, 因为a是字符串'a', 而不是变量a
obj[a] //这个可以打出Adam

我们对象里面可以再添加对象吗, 答案是可以

let obj = {
  name: 'Adam',  //string类型
  age: 25,  //number类型
  gender: 'male', //string类型
  son: {
    name: 'Tomy',
    age: 2,
    gender: 'male'
  }
}

obj.son.name //输出Tomy
bbj.son.age //输出2

我们甚至还能添加个空字符串当key

let obj = {
  name: 'Adam',  //string类型
  age: 25,  //number类型
  gender: 'male', //string类型
  son: {
    name: 'Tomy',
    age: 2,
    gender: 'male'
  },
  '': 'blank'
}

这里还有一点需要注意, 对象的key也是可以加引号的, 不加引号的情况下, key必须符合js的命名规则, 即9a或者a b都是不合法的, 但是如果加上引号, 则'9a'和'a b'则是合法的key名称

let obj = {
  9a: 'xxx', //不合法, 会报错
  '9a': 'xxx' //合法, 不会报错
}

delete, in, for in 和 typeof


delete 和 in

delete用来删除对象里的内容, in用来查看键值对是否在对象中

let obj = {
  name: 'Adam',
  age: 25,
  gender: 'male'
}
'name' in obj    //true 表示obj中有name键值对
delete obj['name']
obj.name        //name: 'Adame'已经被删除,所以是undefined
'name' in obj  //false

for...in

for in用来遍历对象中的key,

我们有以下代码, 用来打印出obj中的key, 但是需要注意的是, 由于对象中的key是无序排列的, 所以先打出来name还是age还是gender, 这个看运气了

let obj = {
  name: 'Adam',
  age: 25,
  gender: 'male'
}

for(let key in obj) {
  console.log(key)
} //随机顺序打印出name, age, gender 

typeof

用来检测变量的类型, 比如

let a = 'adf'
let b = 123
typeof a // string
typeof b // number

这里又有两个个bug

上一篇下一篇

猜你喜欢

热点阅读