JavaScript:typeof和instanceof运算符,函数重载,css盒子模型

270 阅读2分钟

这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战

  • typeof操作符,instanceof操作符

在这里插入图片描述 JS中值的类型分为原始值类型和对象类型。

原始值类型包括 number, string, boolean, null 和 undefined; 对象类型即 object。

首先原始值类型它就不是对象。 另外,要注意 'hello' 和 new String('hello') 的区别,前者是字符串字面值,属于原始类型,而后者是对象。用 typeof 运算符返回的值也是完全不一样的:

typeof 'hello';  // 'string'
typeof new String('hello');  // 'object'

之所以很多人分不清字符串字面值和 String 对象,归根结底就是 JS 的语法对你们太过纵容了。

当执行 'hello'.length 时,发现可以意料之中的返回 5,你们就觉得 'hello' 就是 String 对象,不然它怎么会有 String 对象的属性。其实,这是由于 JS 在执行到这条语句的时候,内部将 'hello' 包装成了一个 String 对象,执行完后,再把这个对象丢弃了,这种语法叫做 “装箱”,不要认为 JS 帮你装箱了,你就可以在写代码的时候不分箱里箱外了!

1.操作符

(1typeof操作符

格式:resul t= typeof variable

返回值:

undefined 值未定义

boolean 布尔值

string 字符串

number 数值

object 对象、null

function 函数


(2instanceof操作符

格式:result = variable instanceof constructor

返回值:

true

false
  • 标准盒子模型和IE盒子模型

在这里插入图片描述

在这里插入图片描述

W3Cschool对盒子模型的图解

在这里插入图片描述 js里面没有函数重载的概念,在其他语言中(如java)中,可以存在同名函数, 只要传入的参数数量或者类型不同即可。

在js中,定义了两个同名函数后, 后面的函数会覆盖前面定义的函数。

结合这道题来说,由于函数声明提升, 所以函数声明会提前,由于存在同名函数,后面的add函数将覆盖第一个add函数, 所以两次调用add()返回的值是相同的。也就是y,z都为4.