奇特的js语法

来源:互联网 发布:细说php第二版 编辑:程序博客网 时间:2024/04/25 03:26

我想,大多数的学习后台语言后再学习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系统的作法一样。

0 0
原创粉丝点击