奇特的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系统的作法一样。
- 奇特的js语法
- JS function 的 一些奇特发现
- IOS:Objective-C中奇特的方法声明语法理解
- IOS:Objective-C中奇特的方法声明语法理解
- 奇特的物以类聚现象
- 奇特的艺术品
- 【读书笔记】《奇特的一生》
- 奇特的javascript特性
- 奇特的生活秘方
- typedef + 奇特的声明
- 《奇特的一生》
- 读书笔记:《奇特的一生》
- codevs4247 奇特的生物
- 一点奇特的经历
- 一个奇特的做法
- 奇特的java类
- 奇特的分数数列
- 05.奇特的一生
- 智能机器人——基于Html5和css3的聊天器界面设计与实现
- 从物理执行的角度透视Spark Job
- CSS块级元素、内联元素
- iOS UIAlertController 弹出框控制器
- 【Android常见问题】关于内存泄漏(二)
- 奇特的js语法
- hdu 2153 仙人球的残影
- 聊天服务器代码(群聊、信息推送)
- block,inline和inline-block概念和区别
- Java 线程封装对象
- 推荐几款chrome插件
- LayoutInflater中的inflate参数的定义
- 【POJ】1703 - Find them, Catch them(加权并查集)
- 用C++写线性容器List