你不知道的javaScript笔记(4)
类型:
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)的更多相关文章
- 你不知道的JavaScript笔记----对象
对象: 1.定义对象属性 属性描述符(也称为:数据描述符) Object.defineProperty(Object,PropertyName,{ value: 6, writable: true, ...
- 你不知道的javaScript笔记(7)
异步:现在与将来 分块的程序 可以把JavaScript 程序写在单独的js 文件中,这个程序是由多个块组成的,这些块 中只有一个是现在执行,其余在捡来执行,最常见的块单位是函数. 例如: funct ...
- 你不知道的javaScript笔记(6)
语法 语句表达式 句子是完整表达某个意思的一组词,由一个或多个短语组成,他们之间由标点符号或者连接词连接起来. 语句相当于句子,表达式相当于短语,运算符则相当于标点符号和连接词. JavaScript ...
- 你不知道的javaScript笔记(5)
原生函数 常用的原生函数 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol( ...
- 你不知道的javaScript笔记(3)
对象 对象可以通过两种形式定义: 声明形式和构造形式 声明形式语法: var myObj = {key:value} 构造形式语法: var myObj = new Object(); myObj.k ...
- 你不知道的javaScript笔记(2)
this和对象原型 this是一个很特别的关键字,被自动定义在所有函数的作用域中 // foo.count 是0,字面理解是错误的 function foo(num) { console.log(&q ...
- 你不知道的javaScript笔记(1)
规避冲突 function foo(){ function bar(a){ i = 3; console.log(a + i); } for ( var i=0; i < 10; i++){ b ...
- 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域
你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...
- 你不知道的JavaScript上卷笔记
你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章 初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...
随机推荐
- Scala 知识点掌握1
Scala知识点巩固 1.Scala简介 Scala是一门面向对象和面向函数的编程语言,是一门静态编程语言,如 Java Scala(变量类型在编译阶段确定):源码文件需要基于 JVM 运行的. 动态 ...
- python 按值排序
转自:http://www.cnpythoner.com/post/266.html,感谢分享! python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需 ...
- 面试题之------Java 反射机制
一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...
- 什么是PDM?
PDM的含义 PDM的中文名称为产品数据管理(Product Data Management). PDM是一门用来管理所有与产品相关信息(包括零件信息.配置.文档.CAD文件.结构.权限信息等)和所有 ...
- SOL的补充
之前写过一些关于远程安装系统的文档,但是对于SOL还是糊涂不清. Serial Console 可以将输入输出转发到串行接口(com1, com2), 假如你有串行读取设备,就可以看到显示,控制输入. ...
- Flask入门数据库框架flask-SQLAlchemy(十)
Web程序开发中最重要的莫过于关系型数据库,即SQL 数据库,另外文档数据库(如 mongodb).键值对数据库(如 redis)慢慢变得流行. 原因 : 我们不直接使用这些数据库引擎提供的 Py ...
- 【Spring实战】—— 2 构造注入
本文讲解了构造注入以及spring的基本使用方式,通过一个杂技演员的例子,讲述了依赖注入属性或者对象的使用方法. 如果想要使用spring来实现依赖注入,需要几个重要的步骤: 1 定义主要的类和需要分 ...
- 如何在SAP CRM WebClient UI里创建HANA Live Report
1. 使用业务角色ANALYTICSPRO登录WebClient UI: 2. 点击新建按钮: 为新建的报表分配一个HANA Live Query: 指定Query的参数: 上图WebClient U ...
- JsonResponse、FileResponse和StreamingHttpResponse
一.JsonResponse对象 class JsonResponse(data,encoder=DjangoJSONEncoder,safe=True,json_dumps_params=None, ...
- python入门2 python字符串换行显示、字符串太长\连接多行
#coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...