您的位置:首页 > Web前端 > JavaScript

奇特的js语法

2016-01-30 18:41 549 查看
我想,大多数的学习后台语言后再学习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系统的作法一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: