这篇文章是在我们熟悉了JS的基础语法后,很少有人去关注的一些细节部分。如果掌握了某些细节也许会对代码的改善有着非凡的作用。也许会使我们的代码更严谨,更高效。

1.if语句的条件

if条件中,括号里是布尔类型的表达式,但你真的了解什么时候是真值,什么时候是假值吗?

下列值被当做假(false):

false;null;undefined;空字符串'';数字0;数字NaN

其它的值都被当做真,包括true、字符串"false",以及所有的对象

2.逻辑运算符

我们都知道,关于逻辑运算符&&是并、||是或。很多人还可以指出JAVA中,&和|是不短路的。但你真的了解JS中的&&和||的运算规则吗?

&&:如果第一个表达式的值为假,那么运算符&&产生它的第一个表达式的值,否则产生第二个表达式的值。

||:如果第一个表达式的值为真,那么运算符||产生第一个表达式的值,否则产生第二个表达式的值。

那么,大家可以猜到下面的代码的输出了吧。

var str = "abc";
alert(true && str); // abc

这可以引申为:当我们尝试从undefined中获得属性时将导致TypeError异常,页面会提示“属性不存在”。但我们使用如下代码就可以避免。

var obj = {
name:"someone",
propoty:{
higth:100,
width:200
}
}
alert(obj.propoty.higth); //
alert(obj.other); // undefined
alert(obj.other.higth); // TypeError
alert(obj.other && obj.other.higth); // undefined

要知道,出现TypeError浏览器是要报错的,而返回undefined是一个值,不会影响程序流程,这对客户来说是非常重要的。

3.typeof运算符

typeof运算符产生的值有'number'、'string'、'boolean'、'undefined'、'function'和'object'。但这里有一个陷阱:如果是一个数组或null,那么结果是'object'。如

alert(typeof null); // object

4.==与===

在我遇到的几乎所有的JS代码中,使用的都是==(恕我见识短浅)。很遗憾,这是有缺陷的。

===和!==会按照你期望的方式工作,如果两边表达式的结果类型一致且拥有相同的值,那么===返回true,!==返回false。但对于==和!=只有在类型一致的时候才会做出正确的判断。如果两边的表达式的结果类型不一直,它们会去做强制类型转换。转换的规则非常复杂,具体可以去搜索相关详述。如下一些例子:

alert('' == '0');           // false
alert(0 == ''); // true
alert(0 == '0'); // true
alert(false == 'false'); // false
alert(false == '0'); // true
alert(false == undefined); // false
alert(false == null); // false
alert(null == undefined); // true
alert(' \t\r\n ' == 0); // true

以上如果使用===,结果都是false。

    注:以上部分例子参考《JavaScript语言精粹》一书。

JavaScript的基础语法,你真的了解吗?的更多相关文章

  1. JavaScript编程:javaScript核心基础语法

    1.javaScript核心基础语法: javaScript技术体系包含了5个内容:          1.核心语言定义:          2.原生对象和雷子对象:          3.浏览器对象 ...

  2. JavaScript 正则表达式基础语法

    前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...

  3. JavaScript的基础语法

    对于Javascript的而言没有数据类型的全部都是通过var来定义创建的.比如: <!DOCTYPE html> <html> <head> <meta c ...

  4. JavaScript数据类型 —— 基础语法(2)

    JavaScript基础语法(2) 数据类型 js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object) ...

  5. JavaScript的基础语法及DOM元素和事件

    一,JavaScript是什么? 1,JavaScript简称:js,是一种浏览器解释型语言,嵌套在HTML文件中交给浏览器解释执行.主要用来实现网页的动态效果,用户交互及前后端的数据传输等. 2,J ...

  6. JavaScript之基础语法

    第一章 javascript语法 一, js代码的引入 方式一:在html页写js代码 <script> alert('hello,world') </script> 方式二: ...

  7. 1.JavaScript 教程:基础语法

    简介: JavaScript web 开发人员必须学习的 3 门语言中的一门: HTML 定义了网页的内容 CSS 描述了网页的布局 JavaScript 网页的行为 用法: (1)HTML 中的脚本 ...

  8. JavaScript核心基础语法

    1 什么是JavaScript? 是一种嵌入在网页中的程序段. 是一种解释型语言,被浏览器解释执行. 由Netscape发明,ECMA(欧洲计算机制造商协会)将其标准化. JavaScript借用了J ...

  9. JavaScript面向对象基础语法总结

    1.Javascript的 对象(Object): //例子:var car = { , , }; 2.使用构造函数来创建对象. //例子: var Car = function() { ; ; ; ...

随机推荐

  1. 阅读verilog程序总结

    1.写程序先直接写出时钟信号 //-----------------产生串行时钟scl,为输入时钟的二分频--------- always@(negedge clk)//二分频表示频率小了,周期大了 ...

  2. sql优化点整理

    此文是我最早开始sql优化至今整理的小知识点和经常遇到的问题,弄懂这些对优化大型的sql会有不少帮助 ---------------------------------使用了多余的外连接------- ...

  3. 常用EXE文件反编译工具

    PE Explorer V1.99 R5 绿色汉化特别版_强大的可视化汉化集成工具 功能极为强大的可视化汉化集成工具,可直接浏览.修改软件资源,包括菜单.对话框.字符串表等: 另外,还具备有 W32D ...

  4. Crtmp 源码分析

    Crtmp Server接收rtmp音视频流,并实现音视频并发,可以作为直播后台的服务.整套代码量并不大,算是轻量级的服务. 花了些时间研究源码,现将研究的结果,记录下来,方便以后查阅. 先不从架构上 ...

  5. 【BZOJ】【1211】【HNOI2004】树的计数

    Prufer序列+组合数学 嗯哼~给定每个点的度数!求树的种数!那么很自然的就想到是用prufer序列啦~(不知道prufer序列的……自己再找找资料吧,这里就不放了,可以去做一下BZOJ1005明明 ...

  6. 【BZOJ】【1008】【HNOI】越狱

    快速幂 大水题= = 正着找越狱情况不好找,那就反过来找不越狱的情况呗…… 总方案是$m^n$种,不越狱的有$m*(m-1)^{n-1}$种= = 负数搞搞就好了…… 莫名奇妙地T了好几发…… /** ...

  7. 研究AFIncrementalStore

    一.增量存贮(AFIncrementalStore:NSIncrementalStore)在CoreData中所处位置

  8. WCF服务中,[DataMember]属性标记的属性一定要有set访问器

    WCF服务中,如果实体类中,包含有[DataMember]属性标记时,该属性一定要有set访问器.当系统必须调用到[DataMember]标记的属性时,如果该属性没有set访问器,则会出错.

  9. 寒假222_codeforces 290 div 2 D

    序号5: 想了很久的DP ,应该很简单,但是.. 题目直接转化为求n个数中选一些数GCD=1且花费最小 数比较大 map  HASH 还有一点 我们知道 GCD(X,X*Y)==X; 所以我的代码里不 ...

  10. ASP.NET - 演练:创建网页以显示 XML 数据

    数据通常是以 XML 格式提供给 Web 应用程序的.但是,XML 数据本质上是分层的,因此您可能希望能够在基于列表的控件中使用 XML 数据,如 GridView 或 DropDownList 控件 ...