1.什么时候用布尔变量当变量

假设你需要一个这样的变量:我在睡觉——存为一个值;我没在睡觉——存为另一个值。

一般的做法:

var stateOne="睡觉",stateTwo="没睡觉";

更好的做法:

var sleeping="true";

这种做法的本质是利用布尔类型的性质,用一个变量来区分两种状态(睡觉用true,没睡用false)——如果你的目地不是区分状态而是这两个状态代表的值,不能用这个办法。

例子:

1.目地是两个状态代表的值:本文的“2.用对象来存储数据时,书写的代码顺序”里的gender对象,虽然也是要区分两种状态(男或者女),但是目地是要把男/女作为字符串用在其它变量中进行拼接,所以不能用布尔值。

2.目地是区分两个状态:

2.用对象来存储数据时,书写的代码顺序 

//记录学生的电话号码、家庭住址、邮箱,并且分男女存放(但经常取出的数据是不需要分男女的)。
var student = {};
student.phone = {};
var gender = {m:"male ",f:"female "};
student.phone.male = {Lei_li:gender.m + "001 ",Ming_wang:gender.m + "010 "};
student.phone.female = {Hong_xiao:gender.f + "001 ",Li_xiao:gender.f + "010 "}
student.address = {};
var country = {cn:"China ",en:"England "}
student.address.male = {Lei_li:gender.m + country.cn + "yunnan ",Ming_wang:gender.m + country.en + "london "};
student.address.female = {Hong_xiao:gender.f + country.cn + "yunnan ",Li_xiao:gender.f + country.en + "london "};
student.mail = {};
var mailType = {qq:"@qq.com ",outLook:"@outlook.com "};
student.mail.male = {Lei_li:gender.m + "liLei" + mailType.qq,Ming_wang:gender.m + "wangMing" + mailType.outLook};
student.mail.female = {Hong_xiao:gender.f + "xiaoHong" + mailType.qq,Li_xiao:gender.f + "xiaoLi" + mailType.outLook};
alert(student.mail.male.Ming_wang);
//思考的时候可以选择自顶向下或自底向上,但写的时候只能是“自底向上”地写。
//用到变量的时候再声明,这有利于阅读。
//如果拼接的字符串之间需要空格,就要在字符串变量最后加个空格(不需要就不加)——同理,最后一个字符串变量也加个空格。

3.形如year = 2010与year = "2010"的区别与应用。

其实是在问,变量要设为数字还是字符串?一般来说设为数字最好:

/*
这里的变量year既可以通过+=操作符变成字符串参与文本显示,又可以用于数值计算——比如根据网络时间,过一年自动进行year + 1,如果year是字符串就没办法做到这一点了。
*/
var year = 2018;
var message = "The year is ";
message += year;
alert(message);

4.从阅读上考虑,什么时候用"<"?什么时候用">"?

//有"&&"的情况下,这样写更接近"1 < test < 5",更易读。
var test = 2;
if(1 < test && test < 5){
alert("Is true");
}
else{
alert("Is false");
}
//有"||"的情况下,把变量放在同一边,可以更直观看出哪个是"小于"哪个是"大于";同时也让数字"-1"和"5"从左到右排列。
var test = -2;
if(test < -1 || test > 5){
alert("Is true");
}
else{
alert("Is false");
}
//数字从左到右、从小到大排列,更易读。
if( !(1 < 2) ){
alert("Is true");
}
else{
alert("Is false");
}

其实这不需要考虑那么多,毕竟这只是简单的逻辑,这都看不懂是不可能的。所以这一条只能说是个人的风格。

4.值为null的变量在转换为布尔值后完全等价于false

var test_items = document.getElementsByTagName("p");
for(var i = 0 ; i < test_items.length ; i++){
var test_title = test_items[i].getAttribute("title");
//对于if判断语句,值为null的在转换为布尔值时就是false,所以这里可以直接写成if(test_title){}
if( test_title != null ){
alert( test_title );
}
}

原文:“当检查某项数据是否是null值时,我们其实是在检查它是否存在.....if(something)与if(something != null)完全等价”

Javascript的一些技巧(《Javascript DOM编程艺术》、Javascript语言精粹)的更多相关文章

  1. JavaScript DOM 编程艺术 ---> JavaScript语法

    二.  JavaScript语法目录 2.1 语法 javaScript代码要通过HTML/XHTML文档才能执行.可以有两种方式完成这一点,第一种是将JavaScript代码放到文档<head ...

  2. JavaScript DOM 编程艺术·setInterval与setTimeout的动画实现解析

    先贴上moveElement()函数的大纲,为了方便观看,删了部分代码,完整版粘到文章后面. function moveElement(elementID,final_x,final_y,interv ...

  3. 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数

    刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...

  4. JavaScript DOM编程艺术读后感(1)—— 平稳退化

    最近,在读<JavaScript DOM编程艺术(第二版)>这本书,想着将自己的读后感记录下来,作为记忆吧. 其实我并不是最近才刚开始读这本书的,我读了有一段时间了.我是一名web前端开发 ...

  5. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  6. JavaScript DOM编程艺术学习笔记(一)

    嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...

  7. JavaScript DOM编程艺术第一章:JavaScript简史

    本系列的博客是由本人在阅读<JavaScript DOM编程艺术>一书过程中做的总结.前面的偏理论部分都是书中原话,觉得有必要记录下来,方便自己翻阅,也希望能为读到本博客的人提供一些帮助, ...

  8. 《JavaScript dom 编程艺术》 placeholder占位符IE8兼容办法。

    在<JavaScript dom 编程艺术>第11章学来的. 相对于用JavaScript替换文本框的提示语句 <!DOCTYPE html> <html lang=&q ...

  9. 《JavaScript DOM 编程艺术》

    前几天京东买了一本书,在豆瓣上好评如潮,买下了啃一啃,书名<JavaScript DOM 编程艺术>,在好好深造一下javaScript.一边啃,一边敲.当然应该要做好笔记.一些简单的就看 ...

  10. 《JavaScript Dom 编程艺术》读书笔记-第4章

    我的前端入门第一本书是<JavaScript Dom 编程艺术>,网上查找资料发现前端的入门推荐书籍最受好评的就是这本和<JavaScript 高级程序设计>了.之所以先选这本 ...

随机推荐

  1. MongoDB小结11 - update【save】

    save是一个shell函数,调用它,可以在文档不存在时插入,存在时更新,它只有一个参数:文档.如果文档有 _id 这个 键,那么save会调用upsert,否则会调用insert,非常方便.

  2. MongoDB小结04 - update【$inc】

    update方法很强大,它有两个参数,一是查询文档,用来找出需要更新的文档,另一个是修改器(modifier)文档,描述对找到的文档做哪些修改. 亮点 更新操作是原子的,若两个更新同时发生,先到达服务 ...

  3. Linux MariaDB 遗忘密码后重置密码

    Linux MariaDB 遗忘密码后重置密码 MariaDB 是 MySQL 的一个分支数据库.处理的办法和 MySQL 相同. 修改 MySQL 配置文件 在 [mysqld] 追加配置项: [r ...

  4. TCP/IP协议族-----22、万维网和HTTP

  5. 又见古老的Typosquatting攻击:这次入侵Npm窃取开发者身份凭证

    有些攻击方式虽然听起来很幼稚,但有时候却也可以生效,比如typosquatting攻击——我们上次看到这种攻击是在去年6月份,这本身也是种很古老的攻击方式. 所谓的typosquatting,主要是通 ...

  6. AE After Effect 如何分段渲染

    如果只要第一段的话,你把要输出的那段首尾处分别按下B键和N键,这样输出时就会只输出这一段了(拖动首尾的栏目修改起始和终止的时间):如果是批量渲染的话你只要在这些不同的合成层里,每个按下ctrl+M键, ...

  7. iOS项目开发实战——通过Http Get方式与server通信

    移动client往往须要同后台server进行通信,上传或者下载数据,最经常使用到的方式就是Http Get,如今我们来学习在iOS项目中使用Get方式同server进行通信. [一]server端实 ...

  8. 2016/1/27 1, File 创建 删除 改名 换路径 2,输出流 不覆盖 换行输入 3,输入流

    1, File  创建  删除  改名  换路径 package Stream; import java.io.File; import java.io.IOException; public cla ...

  9. 2016/1/25 多线程 作业 方法一 继承Thread 方法二 实现Runnable 多线程笔记

    /* * 1,尝试定义一个继承Thread类的类,并覆盖run()方法, * 在run()方法中每隔100毫秒打印一句话.*/ package Stream; //方法一 继承Thread 实现多线程 ...

  10. 利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全)

    利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全) 14.7 利用JFreeChart生成多轴图表 通过JFreeChart插件还可以生成拥有多个坐标轴的图表,简称多轴图表.在生 ...