学习来源:JS基础知识(覆盖JS基础面试题)
Js基础
1、变量类型和计算
1.1、JS中typeof的类型有哪些
console.log(typeof undefined); //undefined
console.log(typeof 123); //number
console.log(typeof '123'); //String
console.log(typeof true); //boolean
console.log(typeod [1,2,3]); //object
console.log(typeof {"id":11}; //object
console.log(typeof null); //object
console.log(typeof console.log); //function
1.2、类型转换
显式类型转换
-
Number函数
- 数字:转换后还是数字
- 字符串:如果可以被解析为数值,那就是响应数值,如果不能,则是NaN,如果空字符串就是0
- 布尔值:true是1,false是2
- undefined:NAN
- null:0
- object:先执行valueOf,看能否替换,如果不行再执行toString,看是否可以转换,如果不可以报错
-
String函数
- 数字:转换成对于字符串
- 字符串:还是对应的字符串
- 布尔值:true为‘true',false是’false'
- undefined: undefined
- null:null
- object:先执行toString,看能否转换,如果不能再执行valueOf,看是否可以转换,如果不可以报错
-
Boolean
-
下面几个是false,其他都是true
- NAN
- null
- undefined
- 0
- ""
- flase
-
隐式类型转换
- 四则运算
- 判断语句
1.3、何时使用 ==,何时使用 ===
除了obj.a == null以外,都用===,==要用的时候一定是已经定义的obj.a == null转换之后是obj.a == null || obj.a == undefined
1.4、JS有哪些内置函数
object
Array
Boolean
Number
String
Function
Date
RegExp
Error
1.5、JS变量按照存储方式有那些类型
- 值类型
- 引用类型(节省空间,公共内存块)
区别:
值类型改变一个不会影响其他,引用类型改变都改变,因为公用内存块
1.5、如何理解JSON
JSON是JS的一个对象,也是一种数据格式,JSON中的两个api如下:
- 将JSON字符串转换成JSON对象
JSON.parse() - 将JSON对象转换成JSON字符串
JSON.stringify()
1.6、使用Object.prototype.toString获取一个对象的类型
var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]
toString.call(/s/); // [object RegExp]
toString.call([]); // [object Array]
//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
2、原型和原型链
2.1、原型的五条原则
- 所以的引用类型都可以自定义添加属性
- 所有的引用类型都有自己的隐式原型(proto)
- 函数都有自己的显示原型(prototype)
- 所有的引用类型的隐式原型都指向对应构造函数的显示原型
- 使用引用类型的某个自定义属性时,如果没有这个属性,会去该引用类型的__proto_(也就是对应构造函数的prototype)中去找
2.2、如何精确判断一个变量是数组类型
arr instanceof Array
instanceof判断一个引用类型是什么引用类型,是通过_proto_(隐式原型一层层往上找,能否找到对应的构造函数的prototype)
2.3、描述new一个对象的过程
- 创建一个新对象
- this指向这个新对象
- 执行代码给this赋值
- return this
function foo(name){
this.name = name;
// return this; //本身会执行这一布
}
var f = new foo('新对象'):
\