整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript 中不需要 void 0

JavaScript 中不需要 void 0

是一个更好的选择

在 JavaScript 代码中,尤其是在较旧的遗留代码中,您有时会发现表达式 void 0。

void 运算符计算表达式并返回未定义的原始值。 void 0 计算 0,它什么都不做,然后返回 undefined。 它实际上是未定义的别名。


为什么 void 0 用作 undefined 的别名?

JavaScript 的一个怪癖是 undefined 不是保留关键字。

相反,它是全局对象的属性。

在 ES5 (2009) 之前,可以修改未定义的全局属性,这可能导致未定义的意外行为。

考虑以下示例(在现代 JavaScript 引擎中不起作用):

// Pre-ES5 example - does not work in modern JS engines:// changes property 'undefined' on the global object:
undefined="something else"; // potentially in some other JavaScript file or script section:
if (aVariable===undefined) {
  // aVariable is equal to "something else", 
  // but not to the primitive value 'undefined'
  doSomething();
}

修改未定义的全局甚至可能发生在第 3 方代码中,例如通过脚本标签导入的库。 由于 void 0 总是返回未定义的实际原始值,因此在 ES5 之前通常使用它来使代码对未定义的全局属性的重新定义进行故障保护。


ES5 之后的全局属性‘undefined’

undefined 可以在全局对象上修改的问题非常大,以至于 JavaScript 标准被改变了。

在 ES5 中,全局属性 undefined 变成了只读的。

尝试更改值在现代 JavaScript 中没有任何作用:

globalThis.undefined="something else";
console.log(undefined); // prints undefined in modern browsers


未定义仍然可以被局部变量遮蔽

但是,虽然不再可能更改 undefined 全局属性,但 undefined 仍然不是 JavaScript 中的保留关键字。 因此它仍然可以被局部变量遮蔽:

const undefined="something else";
let check=aVariable===void 0; // void 0 is needed here

有一个名称为 undefined 的局部变量是您要避免的陷阱。 ESLint 规则 no-undefined 不允许使用 undefined 作为变量名并防止出现阴影问题。


void 0 可以帮助减小捆绑包的大小吗?

表达式 void 0 比 undefined 短。 JavaScript 包大小对于创建快速加载的网站至关重要,减少几个字节会有所帮助。

但是,最好将基本的代码大小优化留给诸如 Terser 之类的压缩程序,作为产品捆绑过程的一部分。 它们可以执行许多不同的优化,并且源代码仍然更具可读性,无需任何手动代码大小优化,例如使用 void 0 而不是 undefined。


在现代 JavaScript 中避免使用 void 0

总而言之,在现代浏览器和 JavaScript 引擎中,没有理由再使用 void 0 了:

  • 全局属性 undefined 在 ES5 和更新的环境中无法更改
  • 使用 ESLint 规则 no-undefined 可以禁止名称为 undefined 的局部变量
  • 在创建生产包时,缩小器可以用 void 0 替换 undefined

相反,void 0 使 JavaSCript 代码更难阅读和理解,因为您需要知道 void 0 的含义,并为同一概念 (undefined) 处理不同的术语 (void 0, undefined)。

您可以使用 undefined 并删除不必要的 void 0 并发症。

因为传统的图像拉伸插值放大,会让图片会变得模糊有锯齿,而SuperImage是一个基于人工智能的图片放大工具,它借助了“深度学习”技术,智能地将噪点和锯齿部分进行补充,以此实现对动漫卡通、插画和照片进行图片高清无损放大,而且放大后的图片不失真…

SuperImage的放大效果比 PhotoZoom / PhotoShop 等效果好太多了,支持 3000x3000px,最高 16 倍放大,而且还可以无需联网本地化放大,完全可以放心使用!

具体我们来安装体验下:

SuperImage是一款本地化工具,无需联网,全程都在本地运行,无需担心图片信息泄漏等问题。

老样子:

软件依旧为绿色版,无需安装,解压后双击即可使用!

软件用起来没啥门槛:

直接把需要做放大处理的图片拖进软件中,就能完成添加操作。

图片添加完成后:

要做的就是选择下放大的倍率和输出的图片格式,最后点下画质增强,就能对图片进行处理。在模式中,软件提供了x4(generic)、x16(generic)和x16(drawing)三种模型,前两种为通用模式,后者为绘画模式,而输出的格式则为PNG和JPG两种主流格式,大家可以根据自己的实际情况来选择。

点击画质增强后:

软件就会对图片进行处理。由于这款软件最早是针对安卓手机开发的,所以对电脑配置的要求相对低一点,魔改到电脑上来用,即便是核显也能轻松应对。

处理前后的变化:

看下这张经典的nice老人表情包处理前后的变化,整个图片清晰度得到了质的飞跃,头发、胡子再到面部皮肤的清晰度都变得嘎嘎清晰,甚至部分纹理字节都还原了出来。

二次元表情包:

同样可以轻松拿捏!效果甚至媲美原始出处,且很多细节都得到了一定的还原~

人物依旧嘎嘎放大:

各种小姐姐美图自然也是不在话下,看这效果,还有谁!放大图片仔细观察,远处的铁塔、汽车等较小物体的处理效果同样非常给力。

实话说,软件对于一些图片的处理上还是存在瑕疵,并非绝对完美,但对一个体积200多兆,且无需联网的工具而言是不可多得的好工具,在很多时候,通过”无损放大图片“来获得不失真更清晰的大图,可以让你的素材得到更有效地利用。

下载链接:https://www.123pan.com/s/lbltjv-Y7z4h.html

iewport:设备显示网页的那部分区域,在移动端的开发起着至关重要的作用。

一、meta

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

content的属性值:

  • width:控制 viewport 的大小,width=device-width代表宽度是设备屏幕的宽度
  • initial-scale=1.0:表示初始的缩放比例
  • minimum-scale=1.0:表示最小的缩放比例
  • maximum-scale=2.0:表示最大的缩放比例
  • user-scalable=yes:表示用户是否可以调整缩放比例

首先,不建议禁用缩放,比如下面的写法:

<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />

这样做会导致的问题:

  1. 实现图片预览的时候,无法双指滑动进行放大、缩小,在体验上超别扭;
  2. IOS端适配的问题(DPI)(没有IOS,因此没测试,可能是最初的iphone屏幕才会出现适配的问题吧)

那么,应该怎样使用呢?一般来说,只设置允许最小的比例是1.0就足够了,具体写法:

<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0" />
  //或
  <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.5" />

二、CSS

利用css的@viewport做适配,但真正做设备适配的代码,不只用到这一个属性。

@viewport可以设置宽度、高度、缩放系数、文档方向等,参考文档:https://developer.mozilla.org/zh-CN/docs/Web/CSS/@viewport

代码兼容:

@-webkit-viewport {
        width: device-width;
 }
@-moz-viewport {
        width: device-width;
 }
@-ms-viewport {
        width: device-width;
}
@-o-viewport {
        width: device-width;
 }
@viewport {
        width: device-width;
}

不过,将设备的width设置为device-width,依然建议通过meta来实现。