javaScript-数据类型和变量
1、比较符
第一种是==
比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===
比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
但是在判断类型时最好使用方法:isNaN()、isString()
等
2、数组创建
通过1:
new Array(1,2,3);
但是建议使用:
var arr = [1,2,3,1.2,'Hello',null.true];
3、JS的对象,由键值对组成,一个对象包含了属性和方法,相当于一个物体的特征和功能。
var person = {
name:'Bob',
age:20,
tages:['js','web','mobile'],
city:'Beijing',
}
对象的键值对的值可以是任意类型。对象名.属性名就可以获取值。
4、JS的变量是动态的,也就是不许要固定声明是什么类型,更加灵活,而静态的变量则必须声明固定类型。
如果一个变量不使用var来声明就会成为全局变量,这回导致出现两个相同名称的全局变量是出现错误。
特殊情况:
在JS代码前声明:‘use strict’
强制声明var,否则报错,但是该语句会有部分浏览器不支持,不支持的会把他看成字符串。
JavaScript-字符串
1、字符串连接
方法1:用+:var msg=‘你好’+name+‘你今年’+age+‘岁了‘;
方法2
ES6以上:var msg=‘你好,&{name},&你今年&{age}岁了‘;
2、操作字符串
其实字符串也可以像数组那样进行部分操作如:.length、每个字符都有对应的索引可以获取,但是不可以修改内容。
方法:
(1):toUpperCase():
字符串全部变为大写
(2):toLowerCase():
小写
(3):indexof('neir')
:搜索指定字符串出现的位置
(4):substring(0,3)
:返回指定索引区间的字符串。
JavaScript-数组
1、数组可以通过索引赋值修改数组内容,索取长度以及对数组长度进行指定可以用.length方法,但是不能超过范围,否则会引起大小变化
但是不建议直接修改大小,需要注意越界问题。
2、方法:(1)indexOf()
(2)slice()
:相当于上述的substring()
(3)push('string','string')
:末尾添加元素,pop()
末尾删除最后一个元素,多次调用对次删除。
(4)shift()
:头部添加元素,unshift():
头部删除元素,与上述元素相似
(5)sort()
:对数组进行排序var arr = [‘B’, ‘C’, ‘A’];顺序排
arr.sort();
arr; // [‘A’, ‘B’, ‘C’]
(6)revers()
:倒序排列
(7)splice(2,3,“C”,“vv”)
:从指定索引的位置删除并添加值。也可以不添加新的值,只删除。()中的值表示从2开始删
除3个元素,3变成0,则没有删除的元素。
(8)concat():
将两个数组进行连接合并成新的数组。
var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]);
added; // ['A', 'B', 'C', 1, 2, 3]
arr; // ['A', 'B', 'C']
虽然组合成了新的数组,但是原数组arr依然存在且不变。
(9)`join(‘符号’):`将数组中的字符串用指定的符号连接起来并返回新的字符串。若数组内存在非字符串则会转换成字符串再连接
。
3、多维数组
var arr = [[1, 2, 3], [400, 500, 600], '-'];
索引:var x=arr[x][y];
JavaScript-对象:
1、Js的对象是一种无序的集合数据类型,由键值对组成,键值对由,号分割末尾不用添加。若含有特殊字符key的命名需要引号包裹,切
key都是字符串,而value可以使任何值。若访问了不存在的值,则会返回undefined.
2、判断对象中是否存在属性用in操作。
‘name’in obj;//true-false
注意:还有一种情况即使当前对象中没有该属性也会显示true,因为该对象可能继承了父对象(object)的属性。
因此为了避免受到继承干扰,可以使用:obj.hasOwnProperty()方法判断
JavaScript-条件判断
1、if/if-else/if-else-if
JavaScript-循环
1、for循环:需要已知循环的初始和结束条件
2、for-in循环
for…in循环是for循环的变体可把对象的属性依次遍历出来。
也可以通过hasOwnProperty方法过滤掉继承属性
var o = {
name: 'om',
age: 10,
city: 'FuJian'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
console.log(key); // 'name', 'age', 'city'
}
}
3、注意Array也是属于对象,而使用for-in对数组进行循环得到的值是string类型。
4、while
:只需要一个判断条件,满足就循环。
5、do-while
:与上一个的区别是,需要先执行一段指令再去判断是否满足条件。
JavaScript-Map和Set
1、Map和Set是ES6的新的数据类型,Map是一组键值对的结构,其查找速度很快。主要是为了解决JS的对象键只能使用字符串。
对比:
通常:
var names = ['Michael', 'Bob', 'Tracy'];
var scores = [95, 75, 85];
数据过多会导致耗时长
Map:var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
不会影响速度
2、初始化Map需要一个二维数组
var m=new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam'); // 88
由于一个键只会对应一个value,所以后设置的会替换前面设置的。
3、Set与Map相似。语法为:
var s = new Set();
var s1 = new Set([1,2,3]);
同样哟个键对应一个值,添加同名的键也只会保留一个。
s.add();添加——s.dalete();删除
JavaScript-iterable类型
1、由于遍历新标准Map和Set不能像数组一样使用下标,因此ES6标准对应该类型,其中Array/Map/Set都可以使用iterable的
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]);
}
2、for–of还有一个特别重要的优势就是修复了for–in,for–in遍历时会输出数组索引以及额外添加的字符串。使用for–of则是直接遍历出数组值。
3、更好的方法是使用iterable内置的forEach()方法。
code:
a.forEach(function (element, index, array) {
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向Array对象本身
console.log(element + ', index = ' + index);
});