闹心的变量

JS 老大拿起手中的工具开始执行代码,不一会老头头上便冒出了细密的汗水,又是谁让老大这么忙碌,这帮 JS 变量又做了什么?让 JS 老大头疼不已?

前言

JS 的本质?复读机?忍者!

“躺好吧!”JS老大拿起一旁的咖啡,对函数说道。

“好!”

老大按下工作台旁的按钮,函数眼中射出两道光芒,投在了工作台前的白幕。工作台一侧,出现了一个小盆,里面空空如也。

“来吧,开始执行!”老大狠狠的抿了一口手中的咖啡,按下了工作台侧边的按钮。

嘿!你好

工作台上方的白幕上出现了函数保存的第一行代码:

let num1 = 1;

老大大手一挥,造了个新数据:1,分配到了变量大厅的 0x007 号单间,于此同时工作台旁的小盆内出现了一个身影,头上标着 num1,身上写着 0x007

“嘿!小不点,你好呀!”老大对刚出现的身影挥了挥手。

“你才是小不点!” num1 挥了挥那只小手,呛了老大一句。

老大嘿嘿一笑,摇了摇头。“不管你了,继续执行!”说着,再次按了下按钮。

白幕上出现了第二行代码:

let num2 = 2;

“又是一个赋值操作啊!简单!” 大手一挥,小盆内又蹦出一个身影,头上标着 num2,身上写着 0x008

“嘿!你好呀!” num2 看到 num1 出现后便脱口而出:“天王盖地虎!”

“小鸡炖蘑菇!” num1 相视一笑。把 num2 拉到了身边。

“继续!”老大并没有管小盆内的 num1num2

融和

let num3 = num1 + num2;

“终于开始有点难度了,num1 num2 过来,干活了。”老大朝着小盆说道。

“好嘞,有何吩咐!”。

“过来吧,让我看看你们的类型,都是数字,OK。” 老大说着,从工作台上拿起累加器,把 num1num2 丢了进去。不一会,累加器给了老大一个结果:3。老大大手一挥,小盆里又蹦出一个身影,头上标着 num3

“快去见见你们的新伙伴吧!” 老大朝着 num1num2 说道。

“天王盖地虎!” num1num2 对新来的小伙伴说道。

“小鸡炖蘑菇!”

“嘿嘿,是我们的人!”

争议

let prefix = "question";

“赋值操作,简单。” 老大刚说完,小盆中又蹦出一个身影,头上标着 prefix

“喂喂,那个新来的,天王盖地虎!” num1prefix 喊道。

“宝塔镇河妖????” prefix 满脸的疑问。

“你别过来!非我族人,哪儿凉快哪儿呆着去!” num1 拉了拉旁边的 num2num3

prefix 还在蒙圈中,下一句代码随之而来:

let question = prefix + num1;

“嘿,prefixnum1 过来,配合一下,求个值!” 老大说道。

“什么!我要和它一起?还求值!非我族类,弄不了!” num1 恶狠狠的说道:“求值是不可能求值的!这辈子都不会和它一起求值的!抛错吧!”

“...” prefix 一脸委屈,继而转为愤怒:“你以为你谁啊!谁愿意与你一起,个渣渣!”

“行了!谁让你们一起的,看把你们能的!” 说着老大拿出一旁的类型转换器,自言自语道:“我记得有个偏向性啥的,+号偏向性是什么来着,让我看一看说明书:JavaScript 类型转换

+号 两侧的类型中有字符类型,则其偏向性为字符串。

“现在两边是有字符类型,那么整体的偏向性应该为字符,那就要把数字转换成字符串!得嘞,num1 你过来,我给你转转!”

说着,老大拿出 String 转换器,放入 num1String(num1))一顿操作后,蹦出个字符串:"1"

“回去吧!接下来就没你的事了!” 老大对着 num1 说道。

“接下来就好办了,字符串拼接。” 说着老大拿出字符串拼接器,放入了 prefix 与刚生成的 "1"。一会就生成了 question

“过来!过来!那边那些变量可不咋地!” prefixquestion 说道。

“我刚刚都瞧见了!个渣渣!” 说着 question 走向了 prefix

“对对对!同类连感觉都一样。” prefix 兴奋的说道。

各自为营

let null1 = null, null2 = null;

转眼间,小盒内又出现了两个身影。

“个渣渣?” prefix 对着 null1null2 说道。

“?? 你才渣渣!” null1 有点恼怒。

“哦!不好意思,认错人了!我就对对暗号,不好意思哈!” prefix 略带抱歉的说道。

“天王盖地虎?” prefix 刚说完,num1 紧接着问道。

“宝塔镇河妖?” null1 有点不知所措。

“你别过来!非我族人,哪儿凉快哪儿呆着去!” num1 脱口而出。

null1 终于怒了,大喊道:“水能载舟!”

“也能煮粥!” 一旁的 null2 脱口而出。

“走我们去那边!一个个的了不起啊!谁还没个暗号!”

看着小盆里快要闹翻了天,老大终于忍不住了:“你们一个个的干嘛呢!要反了不成!”

“非我族类,其心必异!” 变量们突然统一了口径。

“呦呵,这倒挺齐!”

“谁和它们齐了!” 虽然这么说着,但这句依旧齐的不像话。

“停停停!这个给你们,这个盆被我分成了七间,数值字符nullundefined布尔值引用值Symbol各一间,行了吧!”

“行!”

“你们还学!”

“还学!”

“哼!”

“哎~”老大拍了拍毛发日渐稀疏的脑袋,“真是些冤家!”

引用值

let obj = {
    toString() {
        return "this is a string";
    },
    valueOf() {
        return 1;
    }
};

随着代码的执行,引用值的单间也终于入住了一个变量:obj

let sum = num1 + obj;

num1 你过来,obj 你也过来。这是个求和操作!”

“偏向性如何?” obj 来了一句。

“你!知道偏向性?”老大一惊。

“对啊,我可是对象,什么都知道,说吧说吧!我还想着装饰下我的房间呢!快点。”

“emmmm 说明书上说如果有字符的话是字符,没的话是数值!” 老大看着类型转换说明念了出来。“应该是数值,这里并没有字符。”

“了解,反正偏向性不能确定是字符,对吧?” obj 问道。

“嗯,是的,这个 +号 运算的偏向性不确定。”

“好,那我调用我的 valueOf 方法吧,是个数值,给你!现在能确定偏向性了吧!”

“嗯,是数值!”

“那接下来该怎么做,你自己应该清楚了吧,我先走了!” 说完,剩下目瞪口呆的老大,拿着 obj 给的数值:1。生成了 sum 变量,其值为 2

“这个引用值有点厉害,省心!”

质疑

let mergeStr = question + obj;

“嘿,obj 这次偏向性是字符串没差了!”老大得意的说道。

“哦?+号 操作符的偏向性我记得是不确定的吧?”

“是啊,但这里已经有个字符了呀,偏向性不就能确定了吗?”

“那我可不管,我只管操作符的偏向性,只要是不确定,我就调用 valueOf 的结果给你,要是这个结果不是个基础类型,我在想想办法!”

“哈?你确定?”

“你到底是不是个称职的JavaScript 解释器啊!按我说的。”

“哦···” 突然的质疑让老大略感惭愧。

“这个给你。” obj 拿着数值:1 给了老大。“接着你再判断 +号 运算符的偏向性吧,我走了。”

“好,你慢走。” 老大突然有点泄气。但手上的活却依旧干着,不一会 mergeStr 变量出现在了小盒中。

顺畅

let mergeStr2 = `${question}${obj}`;

“这次偏向性确定了,就是字符串,给我字符串吧!” 老大自信的对 obj 说道。

“好,既然偏向性确定是字符串了,那就调我的 toString 吧!这个给你!”说着 obj"this is a string" 塞到老大手中。

老大想了想,问道:“你会不会可能给我非字符类型的啊?”

“emmmm 这个是有可能的哦,但我给到你的肯定是基础类型,你在看情况转换呗!就是这样,我撤啦!”

“得嘞,又是个大爷!”

尾声

老大勤勤恳恳的继续往下执行代码,小盒内的变量进进出出,终于到了收尾的时候。

放下手中的工具,不经叹道:“这函数是谁写的啊,这么不严谨,那有对象和基础类型进行操作的,这么多不同类型间的相互操作,怎么一点质量都没有呢!”

Read more

Gitlab 搭建

Gitlab 搭建

为什么? 想要自己搭建一个代码仓库无非是以下几点原因: 1. 公司内部项目 2. 自己的项目,但不适合在公网 3. 大部分的 git 仓库虽然有私有服务,但价格都不便宜,甚至不如一台云服务器来的便宜 配置及安装文档 Gitlab * 由于 gitlab 会用到 22 端口端口转发的化就走不了 git clone 的默认配置,且占用内存较高,不推荐使用 docker 进行部署; * 由于 gitlab 自带 nginx 默认情况下会与属主机的 nginx 冲突,因此推荐只使用 gitlab 自带的 nginx 进行端口转发; 最小化配置 # path /etc/gitlab/gitlab.rb external_url 'http://git.

By breeze
NPM 私服

NPM 私服

verdaccio 私服搭建,搭建过程中的一些问题以及解决: * docker compose 启动后,可能会报错:配置找不到,添加 config.yaml 文件到映射的 ./conf 目录即可,config.yaml 具体内容可在官网找到,下方也有最小化配置。 services: verdaccio: image: verdaccio/verdaccio container_name: 'verdaccio' networks: - node-network environment: - VERDACCIO_PORT=4873 - VERDACCIO_PUBLIC_URL=http://npm.demo.com ports: - '10001:4873'

By breeze