JS中的数据类型:
- Number(数字)
- String(字符串)
- Boolean(布尔)
- Object(对象)
- Symbol(符号,ES2015 新增)
- null(空)
- undefined(未定义)
其中Object(对象)包括:
- Function(函数)
- Array(数组)
- Date(日期)
- RegExp(正则表达式)
1.Number
JavaScript 不区分整数值和浮点数值,所有数字均用浮点数值表示,在进行数字运算时要特别注意
0.1 + 0.2 = 0.30000000000000004
字符串转数字:
- parseInt(),该函数的第二个可选参数表示字符串所表示数字的进制
parseInt("123", 10); // 123
parseInt("11", 2); // 3,表示该字符串所表示的数为2进制,转换为对应的十进制数为3
parseInt("hello", 10); // NaN,若给定字符串不存在数值形式,函数会返回一个特殊的值NaN(Not a Number的缩写)
parseInt("23.2hello"); // 23
NaN + 5; //NaN,NaN参与的数学运算,结果也会是 NaN
isNaN(NaN); // true,判断一个变量是否为 NaN
- 单元运算符 + 也可以把数字字符串转换成数值
+ "42"; // 42
- parseFloat(),解析浮点数字符串(十进制数字)
parseFloat("23.2hello"); // 23.2
parseInt() 和 parseFloat() 函数会尝试逐个解析字符串中的字符,直到遇上一个无法被解析成数字的字符,然后返回该字符前所有数字字符组成的数字。然而如果使用运算符 “+”, 只要字符串中含有无法被解析成数字的字符,该字符串都将被转换成 NaN
2.字符串
"hello".length; // 5
"hello".charAt(0); // "h"
"hello, world".replace("world", "mars"); // "hello, mars"
"hello".toUpperCase(); // "HELLO"
"3" + 4 + 5; // "345",一个字符串加上一个数字(或其他值),那么操作数都会被首先转换为字符串
'3'+4+true // "34true"
3.布尔
- false、0、空字符串("")、NaN、null 和 undefined 被转换为 false
- 所有其他值被转换为 true
4.变量
声明一个变量的关键字:let 、const 和 var
如果声明了一个变量却没有对其赋值,那么这个变量的类型就是 undefined
- let:声明一个块级作用域的本地变量(for循环,函数体)
- var:申明一个局部变量,作用域类似于python
for(var a=0;a<3;a++){
console.log(a);
}
console.log(a); // for循坏外部还可以继续访问和修改变量a
for(let a=0;a<3;a++){
console.log(a);
}
console.log(a); // 此处报错,变量a只能在for循环代码块中访问
function Test() {
var a = 10; // 显示申明,定义在函数中的变量a,无法在函数外部访问
let b = 20;
c = 30; // 隐式申明,在函数中没有用var关键字,使用直接赋值方式声明的是全局变量,可在外部访问和修改
}
Test(); // 调用函数,在函数中申明3个变量
console.log(a); // 访问出错
console.log(b); // 访问出错
console.log(c); // 可正常访问和修改
- const:声明一个不可变的常量
const Pi = 3.14; // 设置常量Pi的值
Pi = 1; // 此处尝试修改一个已定义的常量,将会抛出一个错误
5.等号操作
双等号组成的相等运算符有类型自适应的功能
123 == "123" // true
1 == true; // true
2==true; //false
// 3等号则不进行类型转换
1 === true; //false
123 === "123"; // false
6.for循环
for in:key(索引或属性名) ,适合遍历对象
for of:遍历可迭代对象的value.
// 给所有对象和数组对象添加一个属性
Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};
let iterable = [3, 5, 7];
iterable.foo = "hello";
// 遍历了列表中的索引以及列表对象的属性
for (let i in iterable) {
console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom"
}
// 仅遍历了列表中的值
for (let i of iterable) {
console.log(i); // 3, 5, 7
}
7.对象
JavaScript 中的对象,Object,可以简单理解成“名称-值”对
“名称”部分是一个 JavaScript 字符串,“值”部分可以是任何 JavaScript 的数据类型——包括对象
- 创建对象
// 创建一个空对象
var obj = new Object();
var obj = {}; // 优先使用
// 创建对象并访问属性
var obj = {
name: "Carrot",
details: {
color: "orange",
size: 12
}
};
console.log(obj.details.color); // orange
console.log(obj["details"].size); // 12
8.数组
- 创建数组
var a = ["dog", "cat", "hen"];
console.log(a.length); // 3
- 数组的length属性:长度,通常比数组最大索引大 1。
var a = ["dog", "cat", "hen"];
a[100] = "fox";
console.log(a.length); // 101,数组的长度是比数组最大索引值多一的数
console.log(a[90]); // undefined,访问一个不存在的数组索引,会得到 undefined
- 数组的遍历
var a = ["dog", "cat", "hen"];
// 通过索引遍历
for (let i = 0; i < a.length; i++) {
console.log(a[i]);
}
// 不推荐这种方式,会同时遍历出数组对象额外的属性
for (let i in a) {
console.log(a[i]);
}
// for of 遍历可迭代对象
for (let i of a) {
console.log(i);
}
// forEach()方法
a.forEach(function (value,index,array) {
console.log(value);
console.log(array[index]);
})
- 其他方法
a.push(item); // 追加元素,可同时追加多个,返回插入后的数组长度
a.unshift(item) // 将 item 插入数组头部,返回数组新长度
a.pop() // 删除并返回数组中的最后一个元素
a.shift() // 删除并返回数组中第一个元素
a.join(sep) // 返回一个包含数组中所有元素的字符串,每个元素通过指定的 sep 分隔
a.toString() // 返回一个包含数组中所有元素的字符串,每个元素通过逗号分隔
a.reverse() // 数组逆序(会更改原数组 a)
a.slice(start, end) // 切片
a.sort([cmpfn]) // 依据可选的比较函数 cmpfn 进行排序,若未指定比较函数,则按字符顺序比较
9.函数
如果没有使用 return 语句,或者一个没有值的 return 语句,JavaScript 会返回 undefined。
如果调用函数时没有传入足够的参数,缺少的参数会被 undefined 替代。
function add(x, y) {
var total = x + y;
return total;
}
add(); // NaN,未传入参数,x和y被替换为undefined,
- 关于传参
调用函数时,多传或少传参数时都不会报错,多余的参数将不被使用,未传入的参数则被undefined替代;
函数内部实际上是访问了一个名为 arguments 的内部对象,这个对象类似于一个数组对象,包括了所有被传入的参数。
function add() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
for(let v of arguments){
console.log(v); // 2,3,4,5
}
return sum;
}
add(2, 3, 4, 5); // 14
- 定义缺省参数
function add(a,b,c) {
// 通过判断参数是否为undefined的方式来给到默认值
if (c == undefined){
c = 10;
}
return a + b + c;
}
console.log(add(2, 3)); // 15
- 自定义对象
// 申明一个构造方法
function Person(first, last) {
this.first = first;
this.last = last;
}
// 给所有的Person对象添加一个属性
Person.prototype.fullName = function() {
return this.first + ' ' + this.last;
};
var p = new Person('Master','Sun');
p.fullName(); // Master Sun
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/A_re-introduction_to_JavaScript