null, undefined
null 和 undefined
null 是一个表示为“空”的对象,转为数值时为0;
undefined是一个表示"此处无定义"的原始值,转为数值时为NaN
返回 undefined 的典型场景
// 变量声明
var i;
i // undefined
// 函数没有返回值
function f() {}
f() // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function fn(val) {
return val;
}
fn() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
与number相关的全局方法
1.parseInt()
parseInt() 方法用于将一个字符串转为一个整数,默认是十进制整数
parseInt('10.33') // 10
parseInt('10', 8) // 8
2.parseFloat()
parseFloat 方法用于将一个字符串转为浮点数
parseFloat('3.14') // 3.14
parseFloat('40 years')// 40
parseFloat('y40') // NaN
isNaN()
isNaN 只对数值有效,如果传入其他值,会被先转成数值。isNan 为true的值,有可能不是NaN,而是一个字符
isNaN('Hello') <=> isNaN(Number('Hello'))
isFinite()
除了Infinity、-Infinity、NaN和undefined这几个值会返回false,isFinite对于其他的数值都会返回true
string
无法改变字符串之中的单个字符。
length属性返回字符串的长度,该属性也是无法改变的。
Base64 转换
- btoa() -> 任意值转为 Base64 编码
- atob() -> Base64编码转为原来的值
btoa('Hello World') // "SGVsbG8gV29ybGQ="
atob('SGVsbG8gV29ybGQ=') // "Hello World"
非 ASCII 码 Base64 转换
要将非 ASCII 码字符转为 Base64 编码,必须中间插入一个转码环节。
function base64Encode(str) {
return btoa(encodeURIComponent(str));
}
function base64Decode(str) {
return decodeURIComponent(atob(str));
}
base64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
base64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"
object
属性的查看
查看一个对象本身的所有属性,可以使用Object.keys方法
var obj = {
key1: 1,
key2: 2
};
Object.keys(obj); // ['key1', key2]
属性的删除:delete命令
delete命令用于删除对象的属性,删除成功后返回true
var obj = { key: 1 }
delete obj.key // true
obj.key // undefined
delete 命令只能删除对象本身的属性,无法删除继承的属性
var obj = {};
delete obj.toString // true
obj.toString // ƒ toString() { [native code] }
toString是对象obj继承的属性,虽然delete命令返回true,但该属性并没有被删除,依然存在。这个例子还说明,即使delete返回true,该属性依然可能读取到值。
in 运算符
in 运算符用于检查对象是否包含某个属性,如果包含返回true
var obj = { key: 1 }
'key' in obj // true
'toString' in obj // true
in运算符不能识别哪些属性是对象自身的,哪些属性是继承的。由于对象obj本身并没有toString属性,但是in运算符会返回true,因为这个属性是继承的。这是可以使用对象的hasOwnProperty方法判断一下,是否为对象自身的属性。
属性的遍历:for...in循环
for...in循环用来遍历一个对象的全部属性。
var obj = { a: 1, b: 2, c:3 };
for (var i in obj) {
console.log('键名:', i + '; 键值:' + obj[i]);
}
// 键名: a; 键值:1
// 键名: b; 键值:2
// 键名: c; 键值:3
for...in循环有两个使用注意点。
- 它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
- 它不仅遍历对象自身的属性,还遍历继承的属性。
对象obj继承了toString属性,该属性不会被for...in循环遍历到,因为它默认是“不可遍历”的。
如果继承的属性是可遍历的,那么就会被for...in循环遍历到。但是,一般情况下,都是只想遍历对象自身的属性,所以使用for...in的时候,应该结合使用hasOwnProperty方法,在循环内部判断一下,某个属性是否为对象自身的属性。
var obj = { name: 'wade' };
for (var key in obj) {
if (obj.hasOwnProperty(Key)) {
console.log(key);
}
}
// name
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。