不要使用==比较,始终坚持使用 === 比较。 == 会自动转换数据类型来对比,有时候会得到奇怪的结果(当对比数据类型不同时) === 会先判断数据类型是否一致(不一致返回false),再对比数据是否相同。
false == 0; // 返回 true
false === 0; // 返回 false
特例:
NaN === NaN; //返回false
必须用 isNaN(Nan) 来判断
格式化多行字符串
var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
字符串是不可变的 使用以下方法,都无法改变字符串
var s = 'Hello, world!';
s[0] = 'X'; //还是 Hello world
s.toUpperCase() //返回大写的字符串,但 s 不变
直接给Array的length赋一个新的值会导致Array大小的变化
var arr = [1, 2, 3];
arr.length = 6; //arr变为[1, 2, 3, undefined, undefined, undefined]
如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:
var arr = [1, 2, 3];
arr[5] = 'x'; // arr变为[1, 2, 3, undefined, undefined, 'x']
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // truexiaoming.hasOwnProperty('name'); //只针对 该属性属于该类,忽略父类var s = ‘’123
If (s.length)
JavaScript把null、undefined、0、NaN和空字符串’‘视为false,其他值一概视为true,因此上述代码条件判断的结果是true。
//对象key循环遍历
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
console.log(key); // 'name', 'age', 'city'
}
//数组遍历, 遍历的是数组的序号(是字符串而不是数字类型)
var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i); // '0', '1', '2'
}
//遍历元素,用of
For (var item of a) {
console.log(i); // ‘A’, ‘B’, ‘C’
}
Array实际上也是个对象,元素下标就是它的key。
var a = ['A', 'B', 'C'];
a.name = ‘D‘
for (var x in a) {
console.log(x); // '0', '1', '2', 'name'
}
因此用 of 来遍历,就不会有上面的问题
for (var x of a) {
console.log(x); // 'A', 'B', 'C' 不会有 ‘D’
}
//forEach 遍历方法
ar.forEach(function (e, i, ar) { //e 是元素,i是序号,ar 是原数组
console.log(`element=${e} index=${i}`)
})
由于JavaScript的变量作用域实际上是函数内部,在函数代码块中声明的变量,在函数体内都是可以用的
function foo() {
{
var i = 1
}
i += 100; // 仍然可以引用变量i
}
function foo() {
{
let i = 1
}
i += 100; // 会报错,无该变量
}
PS:常量声明 const 也有块级作用域功能
var [x,y,z] = [‘a’, ‘b’, ‘c’]
var [x, [y, z]] = [‘a’, [1,2]]
var [,y,z] = [1,2,3]
var person = {
name: '小明',
age: 20,
address: {
city: 'Beijing',
street: 'No.1 Road',
zipcode: '100001'
}
};
var {name, address: {city, zip=‘55’}} = person;
name //小明 city //Beijing zip //应该无值的,但有默认值 ’55‘
var {name: realName} = person;
name //undefined realName //小明
var name, address;
{name, address} = person; //执行会报错
({name, address} = person; ) //用小括号包起来即可