奇特的js语法

奇特的js语法我想 大多数的学习后台语言后再学习 js 的语法时 都会像我一样 对某些语法有所困惑 因为 js 的语法相对 c 和 java 来说 不太严谨了 为了灵活却缺失了严谨 我觉得这样做不太好 造成各人写的代码风格都不一样 让人理解的难度加大了 好了 下面就来盘点那些奇特的 js 语法 1 它每一条语句可以不用分号分隔 不写也不会报错 2 单引号和双引号都代表字符类型 2 js 对数据类型的判断方法繁多且有缺陷

我想,大多数的学习后台语言后再学习js的语法时,都会像我一样,对某些语法有所困惑,因为js的语法相对c#和java来说,不太严谨了,为了灵活却缺失了严谨。我觉得这样做不太好,造成各人写的代码风格都不一样,让人理解的难度加大了。好了,下面就来盘点那些奇特的js语法:



1、它每一条语句可以不用分号分隔,不写也不会报错

2、单引号和双引号都代表字符类型

3、js对数据类型的判断方法繁多且有缺陷

方法一:typeof,缺陷是区分不了null、{}、[]

typeof undefined==”undefined”
typeof null==”object”
typeof {}==”object”
typeof []==”object”
typeof 2==”number”
typeof “222”==”string”
typeof true==”boolean”
typeof (function(){})==”function”






方法二:constructor(用法同instanceof:{} instanceof Object),缺陷是判断不了undefined、null

{}.constructor==Object
[].constructor==Array
2.constructor==Number
“222”.constructor==String
true.constructor==Boolean
(function(){}).constructor==Function






方法三:prototype,这才是最全面的方法,推荐使用

var gettype=Object.prototype.toString
gettype.call(undefined)==[object Undefined]
gettype.call(null)==[object Null]
gettype.call({})==[object Object]
gettype.call([])==[object Array]
gettype.call(‘222’)==[object String]
gettype.call(2)==[object Number]
gettype.call(true)==[object Boolean]
gettype.call(function(){})==[object Function]











当然如果没有判断null、undefined的情况下,推荐用方法二,因为它更简洁

4、令人蛋疼的null和undefined

null==undefined成立,那还要undefined干嘛

我们知道变量只定义未赋值为undefined,当然也可以直接赋值undefined和null给变量

近乎一模一样的2个类型只是为了解决这种情况:因为null时默认会转化为0,undefined则会转化为NaN

null+5==5

undefined+5==NaN

其实我觉得undefined作用更大一样,null可以不要,因为

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

5、if判断变量是否为空

在使用c#或java时,if判断是否为空都要严格先检查是否为Boolean类型,但js不用!!!

凡是为变量默认类型的都为false:

null,undefined,0,””,false

一个字:坑

6、===与!!,这是什么玩意

===是==的升级,除了判断值,还判断类型

!!a相当于a||false,是用了排除a为undefined或null的情况,不然会造成语法错误

7、令人抓狂的兼容性

css、js、jquery不段被标准协会推出新版本和新特性,很多新特性能够实现更炫酷的效果,但是各厂商的浏览器的却并不完全兼容,我们为了照顾用户的浏览器使用习惯,又不得不抛弃它。所以,最好的办法是各浏览器厂商对最新的样式和脚本的解释达成一致,并对各浏览器的版本推出升级补丁,强迫用户去升级和改善浏览效果。这就像windows系统的作法一样。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177194.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午8:05
下一篇 2026年3月26日 下午8:05


相关推荐

  • stdio.h及cstdio的区别

    stdio.h及cstdio的区别转自 找了很多资料 没有说的很明白的 下面是老外的一篇文章 解释的比较清楚 后面给出翻译 Clarifyingst hversuscstdi 转自 http forums codeguru com showthread php Clarifying stdio h versus cstdioIconst

    2026年3月17日
    2
  • Luajit 概述「建议收藏」

    Luajit 概述「建议收藏」一、JIT即时编译器JIT:即时编译器。将频繁执行的代码,通过JIT编译器编译成机器码缓存起来,下次再调用时直接执行机器码。相比与原生Lua的逐条执行虚拟机指令效率更高。对于那些只执行一次的代码,则保持于原生Lua一样,逐条执行。JIT带来的效率提升,并不一定能抵消编译效率的下降。当虚拟机执行指令时并不会立刻用JIT进行编译。只有部分指令需要JIT进行编译,JIT将决定那些代码将被编译。延迟编译有…

    2022年10月7日
    4
  • pycharm2021.11激活码_在线激活

    (pycharm2021.11激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    50
  • 传统php用单例模式的作用大吗,一次生命周期走完不是进程就结束了嘛?[通俗易懂]

    传统php用单例模式的作用大吗,一次生命周期走完不是进程就结束了嘛?

    2022年2月12日
    51
  • 联合索引在B+Tree上的存储结构及数据查找方式[通俗易懂]

    联合索引在B+Tree上的存储结构及数据查找方式[通俗易懂]最困难的事情就是认识自己!个人网站,欢迎访问!前言:本篇文章主要是阐述下联合索引在B+Tree上的实际存储结构。本文主要讲解的内容有:联合索引在B+树上的存储结构联合索引的查找方式为什么会有最左前缀匹配原则在分享这篇文章之前,我在网上查了关于MySQL联合索引在B+树上的存储结构这个问题,翻阅了很多博客和技术文章,其中有几篇讲述的与事实相悖。具体如下:很多博客中都是说:联合索引在B+树上的非叶子节点中只会存储联合索引中的第一个索引字段的.

    2022年6月4日
    29
  • 微信小程序集成Hunyuan-MT 7B:移动端翻译应用开发

    微信小程序集成Hunyuan-MT 7B:移动端翻译应用开发

    2026年3月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号