# 流行常见前端面试技术题
# 所有类型,string|number|NaN|boolean|array|object|function|,共用的属性是什么?除了,null、undefined。(自己出的)
toString()、valueOf()
# 哪些数据类型有length 这个属性?(自己出的)
string | number | NaN | null | undefined | boolean | array | object | function |
---|---|---|---|---|---|---|---|---|
success | error | undefined | error | error | undefined | success | undefined | 0,始终是0 |
# 双等于号比较
结论:
- 字符串和布尔值 是一组,空字符串 和false
- null 和undefined 是一组,以上两组互不相等,同组的组员或者自己相等
- NaN属于Number,自称一派
如果按书写字符长度分布,用以下记忆表格
- 前两个,后两个交叉
- NaN全false
a==a | '' | null | false | undefined |
'' | true | false | true | false |
null | false | true | false | true |
false | true | false | true | false |
undefined | false | true | false | true |
如何按分布可以用一些记忆表格(这个比较好记忆)
a==a | '' | false | null | undefined |
'' | true | true | false | false |
false | true | true | false | false |
null | false | false | true | true |
undefined | false | false | true | true |
# 三等于号比较
- | - | - | - | - |
---|---|---|---|---|
三等于比较a===a | '' | false | null | undefined |
'' | true | false | false | false |
false | false | true | false | false |
null | false | false | true | false |
undefined | false | false | false | true |
- ["1", "2", "3"].map(parseInt) 答案是多少?
# map 用法考察
//map 一定会执行funtion,必须会执行这个currentValu,index,arr
// thisValue 对象作为该执行回调时使用,传给函数,用作this 值,省略。this 为 undefined
array.map(function(currentValue,index,arr){
})
# parseInt 考察
// map:
["1","2","3"].map(function(value,index){
console.info(value,index)
});
//1 0
//2 1
//3 2
//于是,对于map后面加了一个方法parseInt,就相当于
parseInt('1',0); // 1 此时radix 0以10位基础
parseInt('2',1); // NaN redix 为1,小于2,NaN
parseInt('3',2); // NaNredix 为2,小于2不成立,但2进制不满足3
/*********************************************************/
parseInt(string,radix); ////string 必填,radix(2~36)如果 radix 为0,则以10为基础解析,如果0x, 0X开头,以16位基数,如果小于2,、大于36 则返回 `NaN`
parseInt("1", 0); // 十进制 1
parseInt("2", 1); // 第二个参数不在 2-36 内,
parseInt("3", 2); // 二进制 NaN,因为二进制中,不存在3,所以报错
parseInt("4", 3); // 三进制,4的3进制,11,不含4。3进制[0,1,2] ‘4’=>4,4不在3进制里面
parseInt("5", 4); // 四进制,5的4进制,11,不含5
parseInt("6", 5); // 五进制,6的5进制,11,不含6
parseInt("7", 6); // 六进制,7的6进制,11,不含7
parseInt("8", 7); // 七进制,8的7进制,11,不含8
parseInt("9", 8); // 9的八进制=11 因为八进制中,不存在9,所以报错
parseInt("10", 9); // 九进制 (1*9+0 = 9) 10的九进制=11
parseInt("11", 10); // 十进制 (1*10+1 = 11)
parseInt("12", 11); // 十一进制 (1*11+2 = 13)
parseInt("13", 12); // 十二进制 (1*12+3 = 15)
parseInt("14", 13); // 十三进制 (1*13+4 = 17)
parseInt("15", 14); // 十四进制 (1*14+5 = 19)
parseInt("16", 15); // 十五进制 (1*15+6 = 21)
# 判断对象为空?
var b = {};
/* 判断是否是空对象*/
JSON.stringify(b) === '{}'
# 如何阻止冒泡? [*]
e.stopPropagation() 旧的IE e.cancelButton=true
# firfox 与 IE的事件机制
IE 事件冒泡 FF 同时支持捕获型事件、冒泡型事件
# js延迟加载
defer、async,动态创建dom方式【最多】,按需异步加载
# ajax 异步传输 (html+js)
# ajax 缓存问题
# 跨域问题
jsonp 利用script标签不跨域的方式,让js文件发挥json格式的文件。
//jsonp 意味着需要信任远程服务器的脚本,否则会炸鸡。
// 请求jsonp
getSome({say:'hello'})
- iframe
- window.name
- window.postMessage
- 服务商设置代码页面
# 模块化开发
立即执行函数,不暴露私有成员
# CommonJS (通用环境)node的实现、webpack也是
# AMD-require.js/curl.js(异步模块定义,一开始写好,前置,适合浏览器环境) AMD(异步模块定义,一开始写好,前置) (opens new window)
# CMD (sea.js实现-)require.js就近模式 (opens new window) require.js就近模式1 (opens new window)
# 异步加载js
- defer {IE}
- async
- 创建script
# document.write
# document.innerHTML
# ECMAScript 与 JavaScript
- JavaScript 是 ECMAScript 所实现的一个标准
- JavaScript 是 ECMAScript的一种实现
- 一般讲js :dom+bom+ECMAScript