你不知道的javascript笔记

柠檬先生 柠檬先生     2022-09-06     433

关键词:

类型:

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笔记

类型:JavaScript有7种内置类型空值(null)未定义(undefined)布尔值(boolean)数字(number)字符串(string)对象(object)符号(symbol)   除对象以外,其他统称为“基本类型” 用typeof运算符来查看值的类型typeofundefined ==="undefi... 查看详情

你不知道的javascript笔记

...算符则相当于标点符号和连接词。          JavaScript中表达式可以返回一个结果值。            vara=3*6;            varb=a;              b; &nbs 查看详情

你不知道的javascript中,读书笔记

七种内置类型null,undefined,boolean,number,string,object,symboltypeofnull===‘object‘//truenull是typeof是object的唯一的假值typeoffunction会返回‘function‘使用typeofx!==‘undefined‘比直接判断x更加安全,因为不会引发referenceerror 查看详情

你不知道的javascript笔记

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

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

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

你不知道的javascript笔记

规避冲突functionfoo(){functionbar(a){i=3;console.log(a+i);}for(vari=0;i<10;i++){bar(i*2)}} //11无限死循环 区分函数声明和函数表达式最简单的方法是看function关键字出现的位置,如果function是声明中的第一个词,那么是函数声明,否则是... 查看详情

你不知道的javascript--上卷--读书笔记1

作用域是什么?  答:在《你不知道的javascript》书中提到,作用域就是根据名称查找变量的一套规则。古语有“无规矩不成方圆”,但是没有方圆,规矩又给谁用?所以个人理解作用域就是“规矩”+”方圆“。作用域是在创... 查看详情

你不知道的javascript-上卷の读书笔记

...;        1— 作用域对JavaScript而言,大部分情况下编译发生 查看详情

你不知道的javascript--上卷--读书笔记2

...以访问它们被定义时所处的作用域中的任何变量,这就是JavaScript的闭包。闭包有哪些应用?  答:函数作为返回值:functionfoo(){vara=2;functionbar(){//bar拥有涵盖foo作用域的闭包,并对它保持 查看详情

javascript中的this—你不知道的javascript上卷读书笔记

this是什么?this是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。当一个函数被调用时,会创建一个活动记录(有时... 查看详情

你不知道的javascript学习笔记1——作用域

处理程序三要素:引擎:编译与执行过程。编译器:语法分析与代码生成等。作用域:收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。&nb... 查看详情

你不知道的javascript(上卷)读书笔记之二----词法作用域

...要的工作类型,一种是词法作用域,一种是动态作用域,Javascript采用的是词法作用域,关于动态作用域的有兴趣的可以自行Google。1.词法阶段         首 查看详情

《你不知道的javascript上卷》学习笔记(代码片段)

第一部分:作用域和闭包一、作用域1.作用域:存储并查找变量的规则2.源代码在执行之前(编译)会经历三个步骤:分词/此法分析:将代码字符串分解成有意义的代码块(词法单元)解析/语法分析:将词法单元流转换成抽象语... 查看详情

你不知道的javascript上卷-读书笔记-第2章词法作用域-2.2欺骗词法(代码片段)

你不知道的JavaScript上卷-读书笔记-第2章词法作用域-2.2欺骗词法作用域`eval`和`with`的缺点作用域JavaScript在ES6以前只有函数作用域。ES6开始支持块作用域:通常就是包裹的范围作用域中查找变量or函数的规则是从当前向... 查看详情

你不知道的javascript上卷-读书笔记-第2章词法作用域-2.2欺骗词法(代码片段)

你不知道的JavaScript上卷-读书笔记-第2章词法作用域-2.2欺骗词法作用域`eval`和`with`的缺点作用域JavaScript在ES6以前只有函数作用域。ES6开始支持块作用域:通常就是包裹的范围作用域中查找变量or函数的规则是从当前向... 查看详情

读书笔记你不知道的javascript(上卷)--作用域是什么

...1、理解作用域几个名词的介绍引擎:从头到尾负责整个JavaScript程序的编译及执行过程编译器:负责语法分析及代码生成器等脏活累活作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严... 查看详情

读书笔记《你不知道的javascript(上卷)》——第二部分this和对象原型(代码片段)

文章目录第6章行为委托6.1面向委托的设计6.1.1类理论6.1.2委托理论1.互相委托(禁止)2.调试6.1.3比较思维模型6.2类与对象6.2.1控件“类”ES6的class语法糖6.2.2委托控件对象6.3更简洁的设计反类6.4更好的语法反词法6... 查看详情

js你不知道的javascript笔记-this-四种绑定规则-绑定优先级-绑定例外-箭头函数(代码片段)

文章目录1.为什么要用`this`2.关于`this`的误解2.1`this`不是指向函数自身2.2`this`不指向函数的词法作用域3.什么是调用栈与调用位置4.`this`的绑定规则4.1默认绑定`fun()`4.2隐式绑定`obj.fun()`隐... 查看详情