内置数据类型
1. Number
// % 是求余运算符
var a = 1024 ;
var a = 3.1415926 ;
2. String
var a = 'test_string' ;
var b = "test_string2" ;
`这是一个
多行
字符串`
模版字符串
var name = 'jessun' ;
var age = 27 ;
var message = `你好,${name}, 你今年${age}岁了。` ;
操作字符串
var s = 'hello, world!' ;
s.length ;
3. Boolean
true
或者 false
2 > 1 ; // �这是一个 ture
&&
是与运算符, ||
是或运算符, !
是非运算符
true && true || false // 结果为 true
true || false // 结果为 true
!true // 结果为 �false
!(2>5) // 结果为 ture
4. NaN
这是个特殊的量,与其他�所有值不想等,包括它自己:
NaN === NaN ; // �结果为 false
isNaN(NaN) ; // 结果为 true
5. null 和 undefined
null
表示一个“空”的值,相当于�� python 中的 None
。
undefined
表示“未定义”,如果一个函数没有 return
,�调用返回值的时候��,会返回 undefined
。
6. 数组(Array)
类似 python 下的列表
var arr = [1, 2, 3, 4, 'hello'] ;
var arr = new Array(1, 2, 3, ,4, 'hello') ;
类似 python,可以是用索引访问
var arr = [1, 2, 3, 4, 5] ;
arr[0] ; // 返回数值1
arr[5] ; // 返回 undefinded
7. Map
ES6 新加入的数据类型,一组键值对的结构,具有极快的查找速度。无论多大,查找速度都不会变慢。
var m = new Map([['Jason', '90'], ['Kristen', '91'], ['Clair', '92']]) ;
m.get('Jason') ; // return 90
初始化 Map 需要一个�二维数组。
var m = new Map() ;
m.set('Jessun', 1) ;
m.set('Bob', 2) ;
m.has('Jessun') ; // return true
m.get('Bob') ; // return 2
m.delete('Bob') ;
m.get('Bob') ; // return undefined
8. Set
Set 中的 key 不能重复。
var s1 = new Set() ;
var s2 = new Set([1, 2, 3, 3]) ;
s2 ; // Set {1, 2, 3}
s2.add(4)
s2 ; // Set {1, 2, 3, 4}
9. iterable �对象
Array、Map 和 Set 都属于 iterable 对象,可以使用for...of
来遍历。
10. 对象(Object)
无序键值对。
var person = {
name: 'jessun',
age: 27,
tags: ['js', 'python', 'developer'],
city: 'Shanghai',
hasCar: false,
} ;
-
所有键(key)都是字符串类型,所有的值可以是任意类型。
-
通过
.
运算符访问属性。person.name ; // return 'jessun'
-
也可以通过 ['xxx'] 来访问。
person['name'] ; // �return 'jessun'
判断属性存在
`name` in person ; // return true
`toString` in person ; // return true
// 但是�继承而来的属性也会返回为 true
person.hasOwnProperty('name') ; // return true
person.hasOwnProperty('toString') ; // return false
基本语法
1. 赋值语句:
/* 这是注释。
另外,语句结尾需要加上分号。*/
var x = 1 ;
2. 判断语句:
// 这是一个多条件的判断
if (2 > 1){
...
} else if (2 = 1) {
} else {
...
} ;
3. 比较运算符
2 > 5 ; // 结果为 false
7 == 7 ; // 结果为 true
==
�会自动转换数据类型进行比较,所以会得到一些不想要的结果。
===
不会自动转换数据类型,如果数据类型不一致,就返回false
。
所以,不要使用==
比较,始终坚持使用===
比较。
浮点数的想等比较不要使用===
, 而是判断差值在某个在某个阀值之内。
4. 循环
4.1 for
var x = 0 ;
var i ;
for(i=1; i<=10000; i++) {
x = x + i ;
}
// 可以用 break; 来退出循环
4.2 for...in...
var person = {
name: 'jessun',
age: 27,
tags: ['js', 'python', 'developer'],
city: 'Shanghai',
hasCar: false,
} ;
for (var key in person) {
console.log(key) ; // 可以把所有属性循环出来, 包括继承而来的属性
if (person.hasOwnProperty(key)) {
console.log(key) ; // 循环本身定义的属性
}
} ;
var a = ['A', 'B', 'C'] ;
for (var i in a) {
console.log(i) ; // '0', '1', '2'
console.log(a[i]) ; // 'A', 'B', 'C'
}
// return 都是字符串
4.3 for...of...
只循环元素
var a = ['A', 'B', 'C'] ;
a.name = ['Hello'] ;
for (var i in a) {
console.log(i) ; // return '0', '1', '2', 'name'
} ;
for (var i of a) {
console.log(i) ; // return 'A', 'B', 'C'
}
4.4 forEach()
ES5.1 标准引入
var a = ['A', 'B', 'C'] ;
a.forEach(function(element, index, array){
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向 Array 对象本身
console.log(element + ', index = ' + index) ;
} ;
) ;
var s = new Set(['A', 'B', 'C']) ;
s.forEach(function(element, sameElement, set){
console.log(element) ;
} ;
) ;
var m = new Map([1, 'x'], [2, 'y'], [3, 'z']) ;
m.forEach(function(value, key, map){
console.log(value) ;
} ;
) ;
网友评论