JS刷题/前端面试时踩的坑/附前端面经

JS的全局变量问题

在刷题的时候我们尽量用let const的语法,遇到新的变量时也千万别忘了加。
不然很可能定义成全局变量了,然后因为作用域的原因值就不对,特别是遇到什么递归啊回溯啊啥的…

var age = 28;

let ages = 18;

//console.log(window.age);//28

//console.log(window.ages);//undefined
ES5中声明的全局变量是顶级对象的属性,但ES6中不再是。

数据、对象的一个遍历问题

关于for…in 、for…of

    const obj = {
    'abc': ['kk', 'bb'], 'def': ['mm'], 'ghi': ['jj', 'kk'] }
    for (let i in obj) {
   
      console.log(i);//abc def ghi
      console.log(obj[i]);//['kk', 'bb'] ['mm'] ['jj', 'kk']
    }
    const arr = ['a', 'b', 'c', 'd', 'e']
    for (let i in arr) {
   
      console.log(i);//in返回的是索引0,1,...,4
    }
    for (let i of arr) {
   
      console.log(i);//of返回的是'a', 'b', 'c', 'd', 'e'
    }

splice slice 数组

这些方法是针对数组的,
splice方法改变原数组
arr.splice(i,num) 意味着从第i个开始删除num个元素
arr.splice(i,0,‘a’)意味着在第i个元素处插入’a’,要在第i个元素后插入要写成arr.splice(i+1,0,‘a’)

slice会返回新的数组(注意关于浅拷贝深拷贝的问题)
slice一般用于截取,arr.slice(start,end) 从start开始不包括end截取,只有一个参数时,默认截取到最后一个元素

substr substring 字符串

语法:substr(start [,length]) 第一个字符的索引是0,start必选 length可选

substring(start [, end]) 第一个字符的索引是0,start必选 end可选

相同点:当有一个参数时,两者的功能是一样的,返回从start指定的位置直到字符串结束的子串

var str = “hello Tony”;

str.substr(6); //Tony

str.substring(6); //Tony

不同点:有两个参数时

(1)substr(start,length) 返回从start位置开始length长度的子串

“goodboy”.substr(1,6); //oodboy

【注】当length为0或者负数,返回空字符串

(2)substring(start,end) 返回从start位置开始到end位置的子串(不包含end)

“goodboy”.substring(1,6); //oodbo

js的if判断object

var arr = new Array();
// 或 var arr = [];
我们知道,初始化后,即使数组arr中没有元素,也是一个object。

typeof arr;
// “object”
既然是object,用于判断条件时就会被转化为true

if(arr)console.log(“it’s true”);
// it’s true
//也就是说我们做题时对数组(或者对象)判空不要直接用if(xx)因为他是空的也会执行,判断数组为空的方法:
1.length来判断;
判断对象为空的方法:
1.Object.keys(obj).length==0
2.if (JSON.stringify(data) === ‘{}’) {
return false // 如果为空,返回false
}
return true // 如果不为空,则会执行到这一步,返回true
3.for in遍历 能便利的话就不是空的
if(for keys in obj){
return true}
return false
4.var data = {};

var arr = Object.getOwnPropertyNames(data);

console.log( arr.length == 0 ); //true
获取的属性名会放在一个数组中,根据它的长度判断

js的typeof和instanceof的区别

一,typeof:
typeof运算符的返回类型为字符串,值包括如下几种:

    1. 'undefined'              --未定义的变量或值

    2. 'boolean'                 --布尔类型的变量或值

    3. 'string'                     --字符串类型的变量或值

    4. 'number'                  --数字类型的变量或值

    5. 'object'                    --对象类型的变量或值,或者null(这个是js历史遗留问题,将null作为object类型处理),或者是正则表达式,数组

    6. 'function'                 --函数类型的变量或值
    
    几个示例值得注意:
    console.log((typeof function () { }));//'function'
	console.log((typeof class { }));//'function'
	console.log((typeof new String()));//'object'
	console.log((typeof NaN));//'number'
	console.log(typeof []);//object
	console.log(typeof null);//object
	console.log(typeof /\w+/);//object

typeof null返回的是object要注意,至于原因:
js遗留问题,js的值都用32位机器码(二进制)表示的,标志位在低位用1-3个二进制编码表示,object的表示是000,而null是空指针值也为0,所以也用000表示的。

000 => object类型
001 => number类型(整数)
010 => number类型(浮点型)
100 => string类型
110 => boolean类型
undefined => 整数-2^30(整数之外)
null => 0到31位皆为0(正好满足第0-3位皆为0的情况)

二.instanceof :
返回的是true/false
instanceof的官方解释是判断构造函数的prototype是否在对象的原型链上:

function Car(make, model, year) 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值