资讯专栏INFORMATION COLUMN

《JavaScript高级程序设计》笔记:基本概念(三)

jas0n / 1088人阅读

摘要:数据类型中有种简单数据类型也称为基本数据类型和。因为特殊值被认为是一个空的对象引用。尽管和有这样的关系,但它们的用途完全不同。这样做不仅可以体现作为空对象指针的惯例,而且也有助于进一步区分和。

数据类型

ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined,null,boolean,number和string

typeof

typeof null会返回“object”。因为特殊值null被认为是一个空的对象引用。

undefined

undefined类型只有一个值,即特殊的undefined。在使用var声明变量,但没有对变量进行初始化时,这个变量的值就是undefined。

对未初始化的变量执行typeof操作符会返回undefined,而对未声明的变量执行typeof操作符同样也会返回undefined。

var message;
alert(typeof message); // undefined
alert(typeof age); // undefined
null

null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度上看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值会返回“object”的原因。

alert(null==undefined); // true

这里,位于null和undefined之间的相等操作符(==)总是返回true。

尽管null和undefined有这样的关系,但它们的用途完全不同。如前所述,无论在什么情况下都没有必要把一个变量显式地设置为undefined,可是同样的规则对null却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。

Boolean类型

该类型只有两个字面值:true和false。这2个值跟数字值不是同一回事,因为true不一定等于1,false不一定等于0。该类型的2个值是区分大小写的。
虽然Boolean类型只有两个字面值,但ECMAScript所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()。

var message="hello world!";
var messageAsBoolean=Boolean(message);
console.log(messageAsBoolean);// true
Number类型 浮点数值

浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远不如整数。例如,0.1加0.2的结果不是0.3,而是0.300000000000000004,这个小小的舍入误差会导致无法测试特定的浮点数值。

var a=0.2,b=0.1;
    if(a+b==0.3){
        console.log("you got 0.3.");
    }

我们测试这两个数的和不等于3,如果这2个数是0.25和0.05,或者是0.15和0.15,结果都是没有问题的。如果是0.1和0.2,那么测试无法通过。因此,永远不要测试某个特定的浮点数值。

NaN

NaN的两个特点,一是任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括NaN本身。

isNaN()函数接收一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”,isNaN()在接收这个值后,会尝试将这个值转换为数值。而任何不能被转换为数值的值都会导致这个函数返回true.

alert(NaN==NaN); // false
alert(isNaN(isNaN)); // true
alert(isNaN(10)); // false
alert(isNaN("10")); // false
alert(isNaN("blue")); // true
alert(isNaN(true)); // false
数值转换

Number(), parseInt(),parseFloat()

Number()函数的转换规则如下:

如果boolean值,true和false将分别被转换为1和0

如果是数字值,只是简单的传入和返回

如果是null值,返回0

如果是undefined,返回NaN

操作符 一元操作符 递增和递减操作符

执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种情况通常被称为副效应

var age = 29;
var anotherAge = --age +2;

alert(age); // 28
alert(anotherAge); // 30

由于前置递增和递减操作与执行语句的优先级相等,因此整个语句会从左至右被求值。

var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; // 等于21
var num4 = num1 + num2; // 等于21

后置型递增和递减操作符的语法不变(仍然分别是++和--),只不过要放在变量的后面而不是前面。后置递增和递减与前置递增和递减有一个非常重要的区别,即递增和递减操作是在包含他们的语句被求值之后才执行的。

var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; // 等于22
var num4 = num1 + num2; // 等于21
一元加和减操作符

在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。换句话说,布尔值false和true将被转换为0和1,字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的valueOf()和toString()方法,再转换得到的值。

var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
    valueOf : function(){
         return -1;
    }
}

s1 = +s1; // 1
s2 = +s2; // 1.1
s3 = +s3; // NaN
b = +b; // 0
f = +f; // 1.1
o = +o; // -1

一元减操作符只要用于表示负数,例如将1转换成-1。

一元加和减操作符只要用于基本的算术运算,也可以像前面的示例所展示的一样用于转换数据类型。

加性操作符

加法

var result1 = 5+5;
alert(result1); // 10

var result2 = 5+"5";
alert(result2); // "55"

减法

var result1 = 5 - true; //4
var result2 = NaN -1; // NaN
var result3 = 5-3; //2
var result4 = 5 - ""; //5
var result5 = 5 - "2"; // 3
var result6 = 5 - null; // 5
相等操作符
null == undefined; // true
"NaN" == NaN; // false
5 == NaN; // false
NaN == NaN; // false
NaN != NaN; // true
false ==0; // true
true == 1; // true
true == 2; // false
undefined ==0; false
null ==0; false
"5"==5; // true

记住:null == undefined会返回true,因为它们是类似的值;但null===undefined会返回false,因为它们是不同类型的值。

函数
function sum(num1, num2){
    return num1 + num2;
    alert("Hello world"); // 永远不会放弃
}

这个函数会在执行完return 语句之后停止并立即退出。因此,位于return 语句之后的任何代码都不会执行。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87584.html

相关文章

  • JavaScript高级程序设计笔记基本概念

    摘要:一写在前面最近重读高级程序设计,总结下来,查漏补缺。但这种影响是单向的修改命名参数不会改变中对应的值。这是因为对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。实际改变会同步,改变也会同步 一、写在前面 最近重读《JavaScript高级程序设计》,总结下来,查漏补缺。 二、JS简介 2.1 JS组成 ECMAscript:以ECMA-262为基础的语言,由...

    ygyooo 评论0 收藏0
  • JavaScript高级程序设计学习笔记基本语法)

    摘要:数据类型中有种简单数据类型也称为基本数据类型和。在中非空字符串,非零数字,任意对象,都被认为。而空字符串,和,,认为是。用于表示整数和浮点数。标识符由数字字母下划线美元符组成,但首字母不能是数字。变量方法对象命名推荐驼峰法。 JavaScript语法 一.语法简介 因为JavaScript语法和Java等语法非常类似。所以只是简单介绍一下。 大小写 JavaScript是大小写敏感的语...

    Mike617 评论0 收藏0
  • javascript高级程序设计笔记:内存与执行环境

    摘要:因此,所有在方法中定义的变量都是放在栈内存中的当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用因为对象的创建成本通常较大,这个运行时数据区就是堆内存。 上一篇:《javascript高级程序设计》笔记:继承近几篇博客都会围绕着图中的知识点展开 showImg(https://segmentfault.com/img/bVY0C4?w=1330&h=618);...

    fuyi501 评论0 收藏0
  • 004-读书笔记-JavaScript高级程序设计 基本概念(下)

    摘要:操作符,会将数值改变正数变成负数负数变成正数。同时,也说明了,使用两个逻辑非操作符和的操作结果相同。操作符得到的是余数。不相等操作符有两种。 这篇笔记的内容对应的是《JavaScript高级程序设计(第三版)》中的第三章。 1.操作符 1-1 一元操作符 递增和递减操作符 递增和递减操作符有两个 ++ 和 --。一元操作符使用的时候,可以前置也可以后置。由于两个操作方式类似,先只说明 ...

    nevermind 评论0 收藏0
  • JS高级程序设计(1-3章)-笔记

    摘要:写在前面本文记录的是我不熟悉或者我认为值得注意的地方,并不是书上知识点的概括。再就是画图这种。与浏览器没有依赖关系。 写在前面 本文记录的是我不熟悉或者我认为值得注意的地方,并不是书上知识点的概括。 第1章 JavaScript简介 JS诞生时间:1995年(好年轻...) JS诞生背景:表单数据合法性由服务端验证的用户体验不好,希望能在客户端进行验证 JS现在用处:如果没有...

    Cristic 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<