博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Javascript高级程序设计 (第三版)》第三章 基本概念
阅读量:7112 次
发布时间:2019-06-28

本文共 4944 字,大约阅读时间需要 16 分钟。

只挑本人重要的写(有夹杂其他补充)

3.1 语法

注释

单行注释以两个斜杠开头,如下所示:    // 单行注释 块级注释以一个斜杠和一个星号( /* )开头,    以一个星号和一个斜杠( */ )结尾,如下所示:    /*    * 这是一个多行    * (块级)注释    */
  • 严格模式(一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误)
要在整个脚本中启用严格模式可以在顶部添加如下代码:   "use strict";   在函数内部的上方包含这条编译指示,也可以指定函在严格模式下执行:   function doSomething(){   "use strict";   //函数体   }
  • 语句
    ECMAScript 中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾

3.2 变量

描述: ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。

简单来说,每个变量仅仅是一个用于保存值的占位符而已。

  • 注意
    用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量。简单来说,如果在函数中使用 var 定义一个变量,那么这个变量在函数退出后就会被销毁
function test(){    var message = "hi"; // 局部变量  }  test();  alert(message); // 错误

3.3 数据类型

typeof操作符

可能会返回以下结果字符串:

"undefined"——如果这个值未定义; "boolean"——如果这个值是布尔值; "string"——如果这个值是字符串; "number"——如果这个值是数值; "object"——如果这个值是对象或null; "function"——如果这个值是函数。注意:  a.对null返回是'object'。     typeof null // object; b.不能区分对象、数组、正则,对它们操作都返回'object'。     typeof Number()// object; c.对NaN返回是'number'         typeof parseInt('你') === 'number' //true

Undefined类型

描述:声明变量但未对其加以初始化时,这个变量的值就是 undefined。

下面几种情况会出现undefined:     访问数组或对象不存在的成员     定义的变量未赋值。     函数没有返回值,或return后没有数据。 注意:     var a; // undefined     b      // ReferenceErroe:b is not defined;     typeof a; // undefined;     typeof b; // undefined;

Null类型

描述: 表示一个空对象指针; var car = null; alert(typeof car); //

"object" 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。

注意:     console.log(null == undefined) // true;     console.log(null === undefined) //false判断值是否为null:    var a = null;    (!a && typeof a === 'object');// true;

Boolean类型

可转转化布尔类型:

a.假值     undefined、null、false、+0、-0、NaN、'';  b、假值对象     var a = new Boolean(false);     var b = new Number(0);     var c = new String('');     var d = Boolean(a && b && c );     d // true;     var e = a && b && c;     e // String {length: 0[[PrimitiveValue]]: ""};

Number类型

描述: 表示整数和浮点数值(双精度64位二进制); 整数就是没有小数的十进制数。所以42.0即等于“整数”42。

  • 数字语法

a.十进制:

var a = 42; var b = 42.3;

b.前面的0可以省略:

var a = 0.42;var b = .42;

c.小数点部分最后的0也可以省略

var a = 42.0;var b = 42.;

d.默认情况下大部分数字都以十进制显示,小数部分最后的0被省略

var a = 42.3000 // 42.3var b = 42.0 // 42

e.特别大与特别小的数字默认用指数显示

var a = 5E10;a; // 50000000000a.toExponential(); // "5e+10" var b = a * a;b; // 2.5e+21 var c = 1/a;c; // 2e-11

f.由于数字可以使用Number对象进行封装,可以调用Number.prototype方法。如:

var a = 42.59;a.toFixed(0); // "43"a.toFixed(1); // "42.6";a.toFixed(3); // "42.590"在上列中结果实际上是给定数字的字符串形式    // 无效语法42.toFixed(3); // SyntaxError//有效语法(42).toFixed(3);0.42.toFixed(3);42..toFixed(3);在上列中结果是因为第一个.被视为number的一部分,第二个.是属性访问运算符。
  • 较小的数值:(这是二进制浮点数最大的问题)

0.1 + 0.2 === 0.3; // false

解决方法(判断两数是否相等):function numbersCloseEnoughToEqual(n1,n2) {    return Math.abs(n1 - n2 ) < Math.pow(2,-52);}
  • 整数的安全范围:
Number.MAX_SAFE_INTEGER = 2^53 -1;  Number.MIN_SAFE_INTEGER = -(2^53 -1);  如数据库中的64位ID等,由于JavaScript的数值类型无法精确呈现64位数值,所以必须将它保存为字符串。
  • 整数检测:
Number.isInteger = function(num) {     return typeof num === 'number' && num % 1 === 0; }

- 检测是否是安全整数:

Number.isSafeInteger = function(num) {    return Number.isInteger(num) && Math.abs(num) <= Number.MAX_SAFE_INTEGER;}
  • 特殊的数字:

描述:数学运算的操作数不是数字类型,无法返回一个有效的数字,会返回NaN。

a.不是数字的数字

var a = 2/'foo'; // NaNtypeof a === 'number'; // true不是数字的数字是数字类型。注意:    NaN是一个特殊值,他和自身不相等;    NaN != NaN; // true    可用isNaN()来判断(但有个bug):var a = 2 / 'foo'isNaN(a); // true                      var b = 'foo';isNaN(b); // trueisNaN()检查参数是否不是NaN,也不是数字。解决:Number.isNaN = function(n){    return (typeof n === 'number' && window.isNaN(n))}

b.无穷数

var a = 1 /0; // Infinity var b = -1/0; // -Infinity Infinity/Infinity; // NaN 1/Infinity; // 0 -1/Infinity; // -0

c.零值

var a = 0/ -3; //-0var b = 0 * -3; // -0a.toString(); // '0'a + ''; // '0'String(a); // '0'JSON.stringfy(a); // '0'+'-0'; // -0Number('-0'); // -0JSON.parse('-0'); // -0-0 == 0; // true-0 === 0; // true0 > -0; // false区分 -0 和 0:   function isNegZero(n) {       var n = Number(n);       return (n === 0) && (1/n === -Infinity);   }

String类型

特点: 字符串是不可变的,也就是说,字符串一旦建, 它们的值就不能改变。

要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量

转换字符串:

基本类型值的转化规则为:null转化为'null',undefined转化为'undefined',true转化为'true',数字的字符串化则遵循通用规则,数组的默认toString(),将所有单元字符串化后再用','链接起来。

JSON字符串化

注意:a.JSON字符串化并非严格意义上的强制类型转换。    序列化的结果总是字符串     JSON.stringify('42'); // ""42""    JSON.stringify()在对象遇到undefined、function 和 symbol 时会自动将其忽略,在数组中返回null(以保证单元位置不变)                           JSON.stringify(undefined);// undefined    JSON.stringify([1,undefined,function(){},4]); // '[1,null,null,4]'    JSON.stringify({a:2,b:function(){}}) // "{"a":2}"  b.如果传递给JSON.stringify()的对象定义了toJSON()方法,该方法会在字符串前调用,以便将对象转换为安全的JSON值。

Object类型

Object 的每个实例都具有下列属性和方法:

constructor :保存着用于创建当前对象的函数。hasOwnProperty(propertyName) :用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名( propertyName )必须以字符串形式指定(例如: o.hasOwnProperty("name") )。isPrototypeOf(object) :用于检查传入的对象是否是传入对象的原型(第 5 章将讨论原型)。propertyIsEnumerable(propertyName) :用于检查给定的属性是否能够使用 for-in 语句来枚举。与 hasOwnProperty() 方法一样,作为参数的属性名必须以字符串形式指定。toLocaleString() :返回对象的字符串表示,该字符串与执行环境的地区对应。toString() :返回对象的字符串表示。valueOf() :返回对象的字符串、数值或布值表示。通常与 toString() 方法的返回值相同。

转载地址:http://yjwel.baihongyu.com/

你可能感兴趣的文章
伪触发 input file 的click事件
查看>>
远程连接ejabberd的mnesia数据库
查看>>
简单程序实现100以内加减乘除
查看>>
第148天:js+rem动态计算font-size的大小,适配各种手机设备
查看>>
input checkbod 全选 反选
查看>>
httpclient,java跨系统调用,第三接口调用实例
查看>>
Objective-C征途:BOOL Party
查看>>
mysql c-api 预处理语句
查看>>
functions 示例
查看>>
C#编译基础知识(三)
查看>>
插入订单并且输出订单号的sql存储过程
查看>>
虚拟Ip技术如何实现备机容灾
查看>>
windows快捷启动命令
查看>>
Python几个算法实现
查看>>
about selection and range
查看>>
linux性能系列--内存
查看>>
php开发中的一些常用统计的日期
查看>>
洛谷 3951 小凯的疑惑——找规律/数学
查看>>
bzoj 4300 绝世好题——DP
查看>>
Jquery小记
查看>>