js回忆录(1) -- 变量,null 和 undefined
变量:这个东西不同的高度的人看法不一样,甚至不同领域的人的看法也不一样,当初上机组的时候依稀记得老师说这个寄存器那个锁存器什么的,然后根据高低电位就变成了二进制认识的0和1了,当然了具体细节本博主大人也不知道!而在我现在看来,变量就是一个容器,你用什么就向内存提出申请,这个叫做变量声明,至于到底要干什么你就用赋值告诉电脑吧。
js把变量类型大致分为 引用类型和简单类型,通过typeof运算符又可分为:object,function,number,string,boolean,undefined(初学者不要把undefined视为类型不然容易混淆一些概念),通过instanceof运算符又可以判断出正则,,array,promise等等东西。这些都不重要,重要的是你只要知道引用类型和简单类型的特性就行了,引用类型引用同一个内存里边的东西,因此引用了相同对象的变量只要一个变了其他的也会跟着变,而简单类型在这一点和引用类型是不同的。然后es6里边新加了个叫const的东西,锁定了变量的入口地址,使得变量只要声明为某一类型之后,以后就不会变动了。你非作死改变他的值/引用的话就会抛出错误。
然后变量声明会提升,注意js里的作用域链。
总的来说,浏览器访问某一属性/值,是就近取值的,css如此js也可以大致如此理解。
undefined: 变量未声明前是undefined,声明了没赋值是undefined,
null: 内存中和引用类型差不多,
20180411新增一条:
浏览器环境下undefined是window的undefined,null就是null,原型链的终点
所谓 道生一 一生二 二生三 三生万物,js里的道大概是null
然后当一个变量为null或undefined的时候赋值或者读取属性的时候是会出错的。。。
变量差不多就这些内容了,最后说一点js的内存管理机制吧。
关于内存管理,有引用计数垃圾收集和标记-清除两个算法。
引用计数垃圾收集:这是最简单的垃圾收集算法。此算法把“对象是否不再需要”简化定义为“对象有没有其他对象引用到它”。如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。该算法有个限制:无法处理循环引用。比如下面的例子:
function f(){
var o = {};
var o2 = {};
o.a = o2; // o 引用 o2
o2.a = o; // o2 引用 o
return "azerty";
}
f();
当f执行完毕之后,这两个对象不会离开f的作用域,因此这时候o和o2已经可以被回收了,但是他们之间存在循环引用,故而引用计数算法考虑到它们互相都有至少一次引用,所以它们不会被回收,因此就造成内存泄漏了。
IE 6, 7 使用引用计数方式对 DOM 对象进行垃圾回收。该方式常常造成对象被循环引用时内存发生泄漏。
--引用自 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management
标记-清除算法:
This algorithm reduces the definition of "an object is not needed anymore" to "an object is unreachable".
This algorithm assumes the knowledge of a set of objects called roots (In JavaScript, the root is the global object). Periodically, the garbage-collector will start from these roots, find all objects that are referenced from these roots, then all objects referenced from these, etc. Starting from the roots, the garbage collector will thus find all reachable objects and collect all non-reachable objects.
This algorithm is better than the previous one since "an object has zero reference" leads to this object being unreachable. The opposite is not true as we have seen with cycles.
As of 2012, all modern browsers ship a mark-and-sweep garbage-collector. All improvements made in the field of JavaScript garbage collection (generational/incremental/concurrent/parallel garbage collection) over the last few years are implementation improvements of this algorithm, but not improvements over the garbage collection algorithm itself nor its reduction of the definition of when "an object is not needed anymore".
--引用自 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management
简而言之js里全局对象无法访问到的东西都会被回收,这个算法要比前一个算法好,并且在2012之后的现代浏览器上已经的得到了支持。
js回忆录(1) -- 变量,null 和 undefined的更多相关文章
- js中NAN、NULL、undefined的区别
NaN:保留字(表明数据类型不是数字) undefined:对象属性或方法不存在,或声明了变量但从未赋值.即当你使用了对象未定的属性或者未定义的方法时或当你声明一个变量,但你确从未对其进行赋值,便对其 ...
- JS中原始类型Null和Undefined
Undefined类型只有一个值,即undefined.当声明的变量还未被初始化时,变量的默认值为undefined.Null类型也只有一个值,即null.null用来表示尚未存在的对象,常用来表示函 ...
- 160304-02、JS 中如何判断null 和undefined
JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的用法: var exp = undef ...
- JS中如何判断null、undefined与NaN
1.判断undefined: <span style="font-size: small;">var tmp = undefined; if (typeof(tmp) ...
- js判断变量是否等于undefined
js中判断变量是否等于undefined,不是使用==,而是使用typeof. typeof(featureId)!="undefined"
- Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)
一.Js简介和入门 继续跟进JS开发的相关教程. <!-- [使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): 示例:<button onclick="javas ...
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
- js判断变量是否为空字符串、null、undefined
let _isEmpty = (input) => { return input + '' === 'null' || input + '' === 'undefined' || input.t ...
- js null和undefined
在JavaScript开发中,被人问到:null与undefined到底有啥区别? 一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理. 总所周知:null == un ...
- 聊一聊js中的null、undefined与NaN
零.寒暄 翻翻自己的博客,上一篇竟然是六月26号的,说好的更新呢?回顾刚刚过去的这个七月,整天都是公司的入职培训加上自己的小论文,每天奋战到凌晨1点多,这是要挂的节奏啊!但是不论怎么说,自己的时间管理 ...
随机推荐
- 转载 Netty tls验证
https://blog.csdn.net/luo15242208310/article/details/108215019 目录Java ssl单向TLSServer端Client端双向TLSser ...
- rocketMq4.2.0启动broker报错找不到或无法加载主类 Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program]
假如弹出提示框提示'错误: 找不到或无法加载主类 xxxxxx'.打开runbroker.cmd,然后将'%CLASSPATH%'加上英文双引号.保存并重新执行start语句.做如下图处理 但是输出还 ...
- Qt/C++推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)
一.前言说明 推流程序将视频流推送到流媒体服务器后,此时就等待验证拉流播放,一般可以选择ffplay命令行播放或者vlc等播放器打开播放,也可以选择网页直接打开拉流地址播放,一般主流的浏览器都支持网页 ...
- Qt编写地图综合应用59-经纬度坐标纠偏
一.前言 地图应用中都涉及到一个问题就是坐标纠偏的问题,这个问题的是因为根据地方规则保密性要求不允许地图厂商使用标准的GPS坐标,而是要用国家定义的偏移标准,或者在此基础上再做算法运算,所以这就出现了 ...
- Centos7安装VNCserver,并设置为开机自启动服务的方法
参考链接: 1.How To Install and Configure VNC Remote Access for the GNOME Desktop on CentOS 7 2.Centos7作为 ...
- 不为人知的网络编程(十六):深入分析与解决TCP的RST经典异常问题
本文由腾讯技术kernel分享,原题"TCP经典异常问题探讨与解决",下文进行了排版和内容优化等. 1.引言 TCP的经典异常问题无非就是丢包和连接中断,在这里我打算与各位聊一聊T ...
- JMeter 采样器超详细教程
宝子们,今天咱就来好好唠唠 JMeter 里那些厉害的采样器,让你轻松拿捏性能测试和接口测试! 一.采样器大集合 先给宝子们来个采样器的 "全家福",让你们心里有个底: HTTP ...
- 使用GPIO判断网线拔插
USB网卡和以太网交换机"常连"后,增加交换机插拔网线判断机制 这个项目已经做了小半年了,客户是一个做智能电话机的.所谓的智能电话就是一台可以插网线.电话线,外观却是座机的手机. ...
- [软件工具使用记录] windows离线ollama部署本地模型并配置continue实现离线代码补全
qwen2.5coder发布之后,觉得差不多可以实现离线模型辅助编程了,所以尝试在公司内网部署模型,配合vsocde插件continue实现代码提示.聊天功能. 目前使用qwen2.5coder的32 ...
- 【转】Mysql索引失效的情况
在工作中经常能遇到索引失效的情况,只要索引失效就导致了SQL查询慢,服务响应慢,用户体验差的情况:所以下面我们就讨论一下MySQL中索引失效的情况 口诀 全职匹配我最爱,最左前缀要遵守: 带头大哥不能 ...