Files
notes_estom/JavaScript/1JavaScript数据类型.md
2020-07-21 09:13:01 +08:00

5.8 KiB
Raw Blame History

参考教程

1 基本使用

使用方法

  • 直接嵌入<head></head>标签当中。type属性默认是javascript
<head>
<script type="text/javacript">

</script>
</head>
  • 单独放入js文件当中通过标签引入
<head>
<script src=
"/static/js/abc.js">
</head>

2 基本语法

单独语句尽量加分号,自动加分号会导致理解问题。

赋值语句

var x = 1;

注释语句

//单行注释
/* 多行注释
多行注释*/

3 数据类型

Number

不区分证书和浮点数

123//整数
-0.45//负数、浮点数
1.23e3//科学计数法
NaN//不是数字
Infinity//无限大

bool值

true;
false;

null与undefined

null; \\表示空值不等于0不等于''空字符串。
undefined;\\未定义,没什么用

字符串

'hello';
"world";
"\"\u";//反斜杠转义字符Unicode字符
`h
ll
o`;//反引号多行字符串

数组array列表list集合set

[1,2,3.14,'hello',null,true];
new Array(1,2,3);
var arr =[1,2,3.14,'hello',null,true];
arr[0];

对象objectDictionary字典map映射

var person ={
    name:'bob',
    age:20,
    tags:['js','web'],
    zipcode:null
};

4 数据形式

变量定义var

var a;//不强调类型
var b = 1;

常量定义const

const来定义常量

const PI = 3.14;
PI = 3; // 某些浏览器不报错,但是无效果!
PI; // 3.14

4 字符串

模板字符串

var name = 'xiaoming';
var message= "hello" + "world"+name;//两种字符串拼接的办法,通过加号连接。
var message = 'hello world ${name}';//两种字符串拼接的方法,模板字符串

字符串访问

var s = 'Hello,world!';
s.length//长度属性,字符串看成对象。
s[0]//访问字符,字符串看成列表、集合、数组。
s[0]='t';//下标只能访问,不能修改字符串,字符串是不可变的。

字符串操作

var s='Hello';
s.toUpperCase();
s.toLowerCase();
s.indexOf('lo');//字符串首次出现的位置。
s.substring(0,5);//字字符串

5 数组

数组访问与修改

var arr = [1,2,3];
arr.length;//=3
arr.length=6;
arr[1]=99;//数组内容与长度均可变。长度变为6

如果通过索引赋值时索引超过了范围同样会引起Array大小的变化

var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr变为[1, 2, 3, undefined, undefined, 'x']

数组的操作

var arr = [10,20,'30','xyz'];
arr.indexOf(10);
arr.slice(0,3);//切片操作
arr.push('a','b');//向末尾加入多个元素
arr.pop();//去掉最后一个元素
arr.unshift('a','b');//向开头加入多个元素
arr.shift();//去掉第一个元素并返回。
arr.sort();//默认方法排序。
arr.reverse();//array 反转
arr.splice(2,3,'google',88);//从指定位置开始删除若干元素,然后,添加若干元素。
var added = arr.concat([1,2,3]);//连接另一个数组,并返回新的数组
arr.join('-');//用指定字符连接数组元素

多维数组

var arr= [[1,2,3],[400,500,600],'0'];
arr[1][1];//=500

6 对象

对象访问

var xiaoming = {
    name:'xiaoming',
    birth:1990,
    'weight':333
};

xiaoming.name;//'xiaoming'通过点运算符访问。
xiaohong['middle-school'];//访问特殊字符的键。只能用下标的方式。

对象修改

var xiaoming = {
    name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming['name']; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错

'name' in xiaoming;//检查属性是否存在。

7 运算符

NaN与NaN也不相等。使用isNaN()判断是否为数值类型。

+ - * / %;//基本运算符
> < >= <= ==(强制类型转换) ===(包括类型);//比较运算符
! && || ;//逻辑运算符
& | ~ ^ << >> >>>//位运算符
typeof//变量类型运算符
instanceof//对象类型运算符

8 Map映射

创建map

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael');

map使用

var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

9 Set集合

创建Set

单值,值不能重复

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

使用Set

s.add(4);
s.delete(3);

10 iterable循环类型

array、map、Set、object都可以通过for of进行循环。但array本身也是对象也是可以添加新的属性的。

for-of

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍历Array
    console.log(x);
}
for (var x of s) { // 遍历Set
    console.log(x);
}
for (var x of m) { // 遍历Map
    console.log(x[0] + '=' + x[1]);
}

foreach

接收一个函数,每次迭代就自动回调该函数

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
    console.log(element);
});

区别复合数据类型

  • Array 数组,有顺序的单值,单值可重复。
  • Set 集合,无顺序的单值,值不可以重复。
  • object对象无顺序的键值对键必须是字符串。
  • Map映射无顺序的键值对键可以是任意类型。
  • iterable加在其他类型上的特殊方法。