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 转换

  1. btoa() -> 任意值转为 Base64 编码
  2. 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

DwyaneWade
6 声望0 粉丝

« 上一篇
数据类型一
下一篇 »
RegExp对象