JS笔试记录(一)【基本类型与类型转换/字符串与数字的加减/全局的对象/页面生命周期】

这篇博客主要探讨JavaScript的基础知识,包括基本类型与类型转换,如原始类型和对象类型的区别,以及如何进行类型转换。接着讲解变量提升和作用域链,以及js的继承方式。特别讨论了字符串与数字的加减操作,指出在加法运算中,不同类型会进行转换后再拼接或相加。同时,文章提到了JavaScript的对象类型,包括全局对象和内置对象。此外,还涉及事件处理机制和页面生命周期,如DOMContentLoaded和window.onload事件。最后,文章介绍了常见的JavaScript面试题目,如变量提升和对象继承的理解。
摘要由CSDN通过智能技术生成

基本类型与类型转换

  • 六个原始类型(primitive type):String、Number、Boolean、Undefined、Null、Symbol(ES6新增);复杂数据类型Object 是元类型的扩展、有数组Array、Function。
    • 简单数据类型把数据名和值直接存储在栈当中。可以用typeof运算来检测。但是typeof null返回object。
    • 复杂数据类型在栈中存储数据名和一个指针,指针指向该变量在堆中的地址,在堆中存储属性及值。访问时先从栈获取地址,再到堆中拿出相应的值。
  • 简单数据类型作为参数时,函数内部对参数值的修改不会改变外部变量的值,相当于值传递。被传递进去的复杂类型则会被改变。因为复杂数据类型的传递是把栈中对象的指针赋给变量,函数内外两个变量都指向同一个堆中的对象,所以函数内部的对象发生改变,外部的变量也会相应的改变。
  • ==会在两边发生类型的转换。undefined、null、空字符串、数字0、数字NAN在==是会被转换成bool类型fasle
    • [] ,{}和null:{}是一个不完全空对象,原型链上有Object。[]原型链上还直接指向array,最底层是Object。null是完全空对象,没有原型链。因此 [] {} 都会被转为true。 但是""就是false。
    • undefined == null,结果是true。且它俩与所有其他值比较的结果都是false。
    • NaN == NaN 为false。
    • 元类型的==都是转换成Number再比较的,引用类型都是转换成元类型(具体通过valueOf和toString方法),再转换成Number比较的。
    • 注意:[1,2,3].splice(1,1,1) == [2]的值为假,因为虽然左表达式的结果是[2],但是这两个[2]指向的不是同一个地址,所以不一样。

https://zhuanlan.zhihu.com/p/21650547


变量提升

这个我自己之前也写过,就在那边补充了。
但是要注意到底是变量提升还是作用域链的问题,如题:
js搜索变量是从内部顺原型链往外部找的,内部直接找到了name,就不去外部了,执行第一次if时还没初始化值,所以为undefined,然后赋值执行console结束。

var name="World!";
(function()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值