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

数据范例

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://segmentfault.com/a/1190000000601144
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞