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