导航
typeof null === "object"
typeof undefined === "undefined"
Number(null) => 0
Number(undefined) => NaN
null == undefined // true
null === undefined // false
var a; // undefined
b; // b is not defined
{} 的 valueOf 结果为 {} ,toString 的结果为 "[object Object]"
[] 的 valueOf 结果为 [] ,toString 的结果为 ""
未声明的变量使用 typeof 返回字符串 "undefined"
typeof 一个 let 定义的变量会因为暂时性死区报错 ReferenceError(前提:let/const未声明之前赋值或使用)
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError: tmp is not defined
let tmp;
}
console.log(typeof tmp); // ReferenceError: tmp is not defined
let tmp;
let tmp;
console.log(typeof tmp); // undefind 不会报错
typeof 能判断的类型有:string
、number
、boolean
、undefined
、symbol
、function
、bigint
、object
null
的输出结果为 'object'
其它类型都能正确判断'function'
其它都输出 'object'
typeof(null) = object
是 JS 在诞生设计之初留下的历史遗留 BUG 问题Object.prototype.toString.call()
function myTypeof(val) {
var type = typeof(val);
var toStr = Object.prototype.toString;
var map = {
'[object Object]': 'object-object',
'[object Array]': 'object-array',
'[object String]': 'object-string',
'[object Number]': 'object-number',
'[object Boolean]': 'object-boolean'
}
if (val === null) {
return 'null';
} else if (type === 'object') {
var ret = toStr.call(val);
return map[ret];
} else {
return type;
}
}
console.log(myTypeof(function () {}));
console.log(myTypeof(1));
console.log(myTypeof([]));
console.log(myTypeof(true));
console.log(myTypeof(null));
console.log(myTypeof(new String('233')));
console.log(myTypeof(BigInt(123)));
console.log(myTypeof(Symbol(456)));
装箱:把基本数据类型转化为对应的引用数据类型的操作
看以下代码,s1 只是一个基本数据类型,他是怎么能调用 indexOf
的呢?
const s1 = 'Sunshine_Lin'
const index = s1.indexOf('_')
console.log(index) // 8
原来是 JavaScript 内部进行了装箱操作
var temp = new String('Sunshine_Lin')
const index = temp.indexOf('_')
temp = null
console.log(index) // 8
拆箱:将引用数据类型转化为对应的基本数据类型的操作
通过 valueOf 或者 toString 方法实现拆箱操作
var objNum = new Number(123);
var objStr = new String("123");
console.log( typeof objNum ); // object
console.log( typeof objStr ); // object
console.log( typeof objNum.valueOf() ); // number
console.log( typeof objStr.valueOf() ); // string
console.log( typeof objNum.toString() ); // string
console.log( typeof objStr.toString() ); // string
const str1 = "abc";
const str2 = new String("abc");
str1 是基本数据类型
str2 是引用数据类型
方法 | 作用 |
---|---|
Math.max(...arr) | 取arr中的最大值 |
Math.min(...arr) | 取arr中的最小值 |
Math.ceil(小数) | 小数向上取整 |
Math.floor(小数) | 小数向下取整 |
Math.round(小数) | 小数四舍五入 |
Math.sqrt(num) | 对num进行开方 |
Math.pow(num, m) | 对num取m次幂 |
Math.random() * num | 取0-num的随机数 |
JS 是通过访问 BOM(Browser Object Model)对象来访问、控制、修改客户端(浏览器),由于BOM的window包含了document,window对象的属性和方法是直接可以使用而且被感知的,因此可以直接使用window对象的document属性,通过document属性就可以访问、检索、修改XHTML文档内容与结构。因为document对象又是DOM的根节点。
可以说,BOM包含了DOM(对象),浏览器提供出来给予访问的是BOM对象,从BOM对象再访问到DOM对象,从而js可以操作浏览器以及浏览器读取到的文档。
encodeURI()
decodeURI()