每日五题(4)

1.== 和 === 的不同
相等运算符(==)比较两个值是否相等,严格相等运算符( ===)比较是否为同一类型同一值。

=== 先比较类型是否相同,如果是同一类型再比较其值;
== 会把它们转换为同一个类型,再用严格相等运算符进行比较。

console.log(1 ===1); //false
console.log(1 ==1);  //true

注意:undefined和null与自身严格相等

console.log(undefined === undefined); //true
console.log(null === null);  //true
console.log(NaN === NaN);  //false,NaN与任何值都不相等

2.简述 for in 循环的特点及使用场景
for in语句用于对数组或对象的属性进行循环操作。使用for in 会遍历数组所有的可枚举属性,包括原型。如果不想遍历原型方法和属性,可以在循环内部使用 hasOwnProperty()方法判断

for…in遍历的是数组的索引(键名),for…of遍历的是数组元素值
for…in一般得到对象的key或数组、字符串的下标
for…of一般得到对象的value或数组、字符串的值

var myObject={
  a:1,
  b:2,
  c:3
}
for (let x in myObject) {
  console.log(x);
}
//a b c

//for…of函数
for (var key of Object.keys(myObject)) {
  console.log(key + ": " + myObject[key]);
}
//a:1 b:2 c:3

3.数组方法pop(), push(), unshift(), shift()

pop() 方法从数组中删除最后一个元素
push() 方法在结尾处向数组添加一个新元素
shift() 删除首个元素,并把所有其他元素“位移”到更低的索引
unshift() 在开头处向数组添加新元素,并“反向位移”旧元素

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.pop();  //Banana,Orange,Appel
var x = fruits.pop();  //x的值为 Mango,返回被删除值

fruits.push(“Kiwi”); //向fruits末尾添加新元素
var y = fruits.push(“Kiwi”);  //5,返回新数组的长度

//shift() unshift()方法返回值类似

4.作用域链

作用域是在运行时代码中的某些特定部分中变量、函数和对象的可访问性。就是说,作用域决定了代码区块中变量和其他资源的可见性。
作用域就是一个独立的地盘,让变量不会外泄、暴露出去,即隔离变量,使不同作用域下同名变量不会有冲突。
分为:

  • 全局作用域
  • 函数作用域
  • 块作用域(ES6):通过命令let,const声明

当一个变量在当前作用域无法找到时,会尝试寻找外层的作用域,一直延续到全局作用域,呈链式连接。作用域链保证对变量和函数的有序访问

作用域与执行上下文
作用域在函数定义时就确定,且不会改变;而执行上下文在运行时确定,但随时可以改变。
同一个作用域下,不同的调用会产生不同的执行上下文环境,从而产生不同的变量的值。

5.js判断类型

  1. typeof
    只能判断基本数据类型和function,无法判断对象和数组以及null,因为都返回object

  2. instance of运算符
    用来判断数据是否是某个对象的实例,返回一个布尔值
    可用于区分自定义对象

// 判断 p 是否为 Person 的实例
function Person(name) {
 this.name = name
}
const p = new Person('sunshine')
p instanceof Person  // true

不能直接判断基本数据类型,需要通过基本类型对应到包装对象来判断。

5 instanceof Number // false
new Number(5) instanceof Number  // true
  1. Object.prototype.toString.call()
    对每一种数据类型的实用,返回一个形如“[object XXX]”的字符串
    但无法区分自定义对象类型
//正则表达式
var reg = /[hbc]at/gi;
Object.prototype.toString.call(reg); // "[object RegExp]"
  1. constructor
    constructor属性表示原型对象与构造函数之间的关联关系。
console.log('22'.constructor === String)        // true
console.log(true.constructor === Boolean)       //true
console.log(new Date().constructor === Date).   //true
  1. Array.isArray()
    isArray()方法是Array类型的一个静态方法,可以判断一个值是否为数组,返回布尔值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值