类型:

JavaScript 有7种内置类型

空值 (null)

未定义(undefined)

布尔值(boolean)

数字(number)

字符串(string)

对象(object)

符号(symbol)

除对象以外,其他统称为“基本类型”

用typeof 运算符来查看值的类型

typeof undefined  === "undefined";   // true

typeof true === "boolean";  // true

typeof 42 === "number";  // true

typeof "42" === "string";  // true

typeof {life:42} === "object";  // true

typeof Symbol() === "symbol"; // true

typeof null  === "object"  // true

我们需要使用复合条件来检测null 值的类型

var a = null;

(!a && typeof a === "object"); true

null 是假值 是唯一一个用typeof 检测会返回 “object” 的基本类型

函数是对象的一个子类型,函数是可调用的对象,他有一个内部属性[Call]该属性使其可以被调用。

函数对象的的length 属性是其声明的参数的个数:

function a(a,c){

  }

a.length;  // 2

数组也是对象的一个子类型,其length 是元素的一个数。

typeof [1,2,3] ==== "object"; // true

值和类型

Javascrpit 中的变量是没有类型的,只有值才有,变量可以随时持有任何类型的值。

typeof 运算符总是会返回一个字符串:

typeof typeof 42; // "string"

typeof 42 首先返回字符串“number”,然后typeof "number" 返回"string"

undefined 和 undeclared

变量在已声明但未赋值的时候是undefined.

没有在作用域中声明的过的变量是undeclared 的。

但是往往都是这两种情况都会是undefined  ,浏览器处理问题。

全局变量可以通过window. 来访问。

数组:

在创建稀疏数组,既含有空白或空缺的数组

var  a = [ ];

a[0] = 1;

// 此处没有设置a[1] 单元

a[2] = [3];

a[1];   //undefined

a.length; // 3

可以通过数字进行索引,也可以包含字符串键值和属性。(建议数字索引)

var a  = [ ];

a[0] = 1;

a["foobar"] = 2;

a.length;  1

a["foobar"]; // 2

a.foobar; // 2

类数组

工具函数slice(...) 经常被用于类型转换

function foo(){

var  arr = Array.prototype.slice.call(arguments);

arr.push("bam");

console.log(arr);

}

foo("bar","baz"); // ["bar","baz","bam"]

ES6 中的内置工具Array.from(...) 也能实现同样的功能。

var arr = Array.from(argments);

字符串

借用数组的非变更方法来处理字符串

var a = "foo";

a.join; // undefined

a.map; // undefined

var c = Array.prototype.join.call(a,"-");

var d = Array.prototype.map.call(a,function(v){

return v.toUpperCase() + ".";

}).join("");

c; // "f-o-o"

d; // "F.o.o"

先将字符串转换为数组,待处理完毕在将结果换回字符串。

var a = "foo";

var c = a

// 将a的值转换为字符数组

.split("")

// 将数组中的字符进行倒转

.reverse()

// 将数组中的字符拼接回字符串

.join("");

c; // "oof"

数字

JavaScript 只有一种数值类型: number(数字);

数字的语法

数字常量一般用十进制表示

var a = 42;

var b = 42.3;

数字前面的0可以忽略:

var a = 0.42;

var b = .42;

小数点后小数部分最后面的0 可以忽略。

var a = 42.0;

var b = 42.;(不建议这样写)

特别大或者特别小的数字默认用指数格式显示,与toExponential()函数输出的结果相同。

var a = 5E10;

a;

a.toExponential(); // "5e+10"

var  b = a * a;

b;   // 2.5e+21

var  c =  1 / a;

c;    // 2e-11

指定小数显示的位数

var a = 42.59;

a.toFixed(0); // "43"

a.toFixed(1);  // "43.6"

a.toFixed(2); // "43.59"

a.toFixed(3); // "43.590"

toPrecision(..) 方法用来指定有效数位的显示数

var  a = 42.59;

a.toPrecision(1); // "4e+1"

a.toPrecision(2); // "43"

a.toPrecision(3); // "42.6"

a.toPrecision(4); // "42.59"

a.toPrecision(5); // "42.590"

(适用于数字变量,也使用于数字常量)

较小的数值

0.1 + 0.2 === 0.3;  // false

可以使用Number.EPSILON 来比较两个数字是否相等(在指定的误差范围内)

整数的安全范围

最大数为 2^53 - 1, 即9007199254740991      Number.MAX_SAFE_INTEGER

最小整数为 -9007199254740991   Number.MIN_SAFE_INTEGER

整数检测

要检测一个值是否是整数,ES6 Number.isInteger(...)

Number.isInteger(42);   // true

Number.isInteger(42.3); // false

32 位有符号整数

虽然整数最大能够达到53位,但有些数字操作数字操作只是用32为数字。

特殊数值

不是值的值

undefined 类型只有一个值,即undefined

null  类型也只有一个值 ,即 null

undefined

void 运算符

undefined 是一个内置标识符,它的值为undefined, 通过void

运算即可得到此值。

特殊数字

不是数字的数字

数学运算的操作数不是数字类型,就无法返回一个有效的数字,这

种情况下返回的值就是NaN.

不是数字的数字,仍然是数字类型。

执行数学运算没有成功,这是失败返回的结果。

无穷数

正无穷数  Infinity

负无穷数 -Infinity

特殊等式

ES6 Object.is(...)来判断两个值是否绝对相等。

var b = -3 * 0;

Object.is(b, -0);  // true

Object.is(b,0); // false

值和引用

JavaScript 对值和引用的赋值/传递在语法上没有区别。

var  a = 2;

var   b = a;  // b 是a 的值的一个副本。

b++ ;

a; // 2

b; // 3

var  c = [1,2,3];

var d = c; // d 是[1,2,3]的一个引用

d,push(4);

c;  // [1,2,3,4]

d; // [1,2,3,4]

简单值是通过值复制来赋值、传递, unll,undefined,字符串,数字,布尔和 symbol

复合值,对象函数,则通过引用复制的方式来赋值/传递。

由于引用指向的是值本身而非变量,所以一个引用无法更改另一个引用指向。

var  a = [1,2,3,4];

var b = a;

a; // [1,2,3,4]

b; // [1,2,3]

// 然后

b = [1,2,3];

a; // [1,2,3]

b; // [4,5,6]

你不知道的javaScript笔记(4)的更多相关文章

  1. 你不知道的JavaScript笔记----对象

    对象: 1.定义对象属性 属性描述符(也称为:数据描述符) Object.defineProperty(Object,PropertyName,{ value: 6, writable: true, ...

  2. 你不知道的javaScript笔记(7)

    异步:现在与将来 分块的程序 可以把JavaScript 程序写在单独的js 文件中,这个程序是由多个块组成的,这些块 中只有一个是现在执行,其余在捡来执行,最常见的块单位是函数. 例如: funct ...

  3. 你不知道的javaScript笔记(6)

    语法 语句表达式 句子是完整表达某个意思的一组词,由一个或多个短语组成,他们之间由标点符号或者连接词连接起来. 语句相当于句子,表达式相当于短语,运算符则相当于标点符号和连接词. JavaScript ...

  4. 你不知道的javaScript笔记(5)

    原生函数 常用的原生函数 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol( ...

  5. 你不知道的javaScript笔记(3)

    对象 对象可以通过两种形式定义: 声明形式和构造形式 声明形式语法: var myObj = {key:value} 构造形式语法: var myObj = new Object(); myObj.k ...

  6. 你不知道的javaScript笔记(2)

    this和对象原型 this是一个很特别的关键字,被自动定义在所有函数的作用域中 // foo.count 是0,字面理解是错误的 function foo(num) { console.log(&q ...

  7. 你不知道的javaScript笔记(1)

    规避冲突 function foo(){ function bar(a){ i = 3; console.log(a + i); } for ( var i=0; i < 10; i++){ b ...

  8. 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域

    你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...

  9. 你不知道的JavaScript上卷笔记

    你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章   初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...

随机推荐

  1. Junit入门教程

    做开发的时候,完成一个接口.方法.函数或者功能等,需要测试,是否有bug,有逻辑错误.这里有两种方案测试 1. 在main中写测试方法 2. 使用开源框架,这里使用的junit main写测试方法优点 ...

  2. 【Linux】查看磁盘空间大小

    Ubuntu 查看磁盘空间大小命令 df -h Df命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息, 命令格式: df -hl  显示格式为:  文件系统 容量 已 ...

  3. Implementation: Quick Sort 2014-08-19

    #include <stdio.h> void print(int *a, int start , int end); void quick_sort(int *a, int start, ...

  4. 序列化及json&pickle的使用

    一.序列化 序列化是指把内存里的数据类型转变成字符串.以使其能存储到硬盘或通过网络传输到远程.——硬盘或网络传输时只能接受bytes. Python中用于序列化的两个模块: json:用于字符串和Py ...

  5. scss-颜色运算符

    scss允许使用颜色分量以及算术运算和任何颜色表达式返回颜色值. 例如scss代码: $color1: #333399; $color2: #CC3399; p{ color: $color1 + $ ...

  6. webstrom 在脚本区域写其他语言得到语法提示

    webstrom 在脚本区域写其他语言得到语法提示 webstrom 的提示小灯泡 点击inject language or reference 选择相应的语言. 如果写的内容比较多, 可以按照web ...

  7. MFCdll的两种调用方法

        有同事问我mfcdll的掉用方法,这里总结了一下.   1 lib库调用   只要VS能找到dll对应的lib和h文件,就可以开发和调试.包含lib和h文件有两个方法. 第一种方法设置路径是 ...

  8. ASP.NET全局异常处理

    Web项目部署后,异常直接暴露给用户会产生很不好的体验.只是暴露在服务器端又无法实时记录异常原因以便加以重现并修复.所以配合Log4Net记录日志信息,同时全局异常处理来营造良好用户体验就比较重要了. ...

  9. .NET开源工作流RoadFlow-表单设计-保存与发布

    表单的过程中可以随时保存,以便下次继续设计. 表单设计完成后即可点击发布按钮,发布表单,发布表单后即可在流程设计时选定该表单.

  10. HTML 5入门知识(二)

    使用HTML 5结构标签 <article> <article>标签可以在网页中定义独立的内容,包括文章.博客和用户评论等.一个article元素通常有它自己的标题,一般放在一 ...