JavaScript备忘录(1)——内置类型
JavaScript有一些内置类型,还有很多常用的内置的方法,本文稍作总结,以备查阅。
值类型
我的理解,值类型是分配在栈上的,而引用类型(当然也包括引用类型内部的值类型)是分配在堆上的。值类型是不可以改变的,比如:
var s = "hello";
s = "hello2";
上述并没有将字符串"hello"改成"hello2",而是新创建了一个字符串"hello2",前一个字符串仍然存在(只不过无法访问了),并于当前作用域被回收时销毁。
值类型很简单,有五种:undefined,null,boolean,number,string,都通过字面量来创建。有两点需要注意
- 值类型没有方法,诸如3.1415.toFixed(2)或者"hello".toUpperCase()的用法,实际上都已经对值类型进行了包装。
- undefined和null的区别:前者通常表示一个不存在的/非法的值类型变量,后者表示一个不存在的/非法的引用类型变量。
- number支持八进制012和十六进制0xA的字面值。
包装类型
在值类型变量上调用函数或方法,浏览器会事先对其进行包装为对象,然后调用该对象的相关方法,如3.1415.toFixed(2),就是先把值类型包装为内置的Number类型,然后调用Number类型的toFixed方法。我们也可以显式地进行手动包装:
var n = new Number(3.1415);
包装类型的实例可以看做是临时对象,在调用过需要的函数后就不能再访问了,因此其上的方法不会影响变量原先的值。比如:
var x = 3.1416;
x.name = "PI"; // var tmpx = new Numer(x);
// tmpx.name = "PI";
console.log(x.name);
包装类型有很多有用的内置方法:
Number
在值类型变量或字面量(为方便,举例都在字面量上直接调用,下同)上调用方法:
- toFixed(n):指定小数位数,如21.628.toFixed(2)返回"21.628"。
- toExponential(n):指定小数位数并以科学计数法输出,如21.628.toExponential(2)返回"2.16e+1"
- toPrecision(n):指定有效数字位数,如21.628.toPrecision(4)返回"21.63"。如果精度不到个位,以科学计数法表示,如21.628.toPrecision(1)返回"2e+1"。
注意,以上三个方法返回的都是字符串。
String
在值类型变量或字面量上调用方法:
- charAt(i):返回字符串中指定位置的字符(返回的类型还是字符串),如"hello".charAt(1)返回"e"。
- charCodeAt(i):返回指定位置字符编码,如"hello".charCodeAt(1)返回"101"。
- concat(arguments):连接字符串,接收任意多个参数。如"hello".concat(" world", "!")返回"hello world!"。但实际上,我们更常使用+运算符连接字符串。
- slice(i1, i2):返回指定两个索引值间的字串,如"hello world".slice(3, 7)返回"lo w"。如果i2没有指定,默认为最后一个字符的索引值。
- substring(i, n):返回从指定索引值开始,具有某个长度的子串,如"hello world".substring(3, 7)返回"lo worl"。如果n没有指定,效果与slice一致。
- substr(i1, i2):与slice(i1, i2)相同。唯一区别在于索引值i为负的时候,如"hello".substr(-3, 4)会被转化为"hello".substr(5-3, 4)返回"ll",而substr(-3, 4)会被转为"hello".substr(0, 4)返回"hell"。
- indexOf(s, i):从索引值i的位置顺序搜索字符串,返回子串第一次出现的位置,若不设定i,默认为0。
- lastIndexOf(s, i):从索引值i的位置逆序搜索字符串,返回子串第一次出现的位置,若不设定i,默认为length-1。
- trim():删除所有前置和后置的空格,如" hello world! ".trim()会返回"hello world!"。
- toLowerCase和toUpperCase():大小写转换,如"Hello".toUpperCase()会返回"HELLO"。
- localeCompare(s):字典法比较两个字符串大小,如"bag".localeCompare("bad")返回1,而"bag".localeCompare("baggage")返回-1。
字符串的模式匹配方法记录在正则表达式的章节。
引用类型
引用类型,也就是对象(object)。对象可以通过对象字面量来创建,也可以通过对象字面量来创建,也可以通过构造函数来创建。JavaScript的内置对象包括Object,Array, Date, Math, Function,RegExp,它们都继承自Object类型。继承的相关知识留在专门章节总结,函数和正则表达式也是。
Object
使用字面量创建的对象就是Object类型。Object类型的方法主要包括,注意其他内置方法也很可能有类似的方法,他们都(覆盖式地)继承自Object方法。
Array
- 可以通过字面量[1, "hello", {x:3}]创建数组,也可以通过构造函数new Array(20)或new Array(1, "hello", {x:3})创建数组。数组内置方法较多:
- toString(s):以逗号(默认)或其他分隔符输出数组(即对数组中每个元素调用toString()方法并用分隔符相连),如[1, "hello", {x:1}].toString(";")返回"1;hello;[object object]"。
- push(ele)和pop():从数组尾端压入或弹出元素。
- unshift(ele)和shift():从数组前端压入或弹出元素。
- reverse():反转数组。
- sort(func):升序排序数组,默认将数组中的所有元素转化为字符串排序(即使所有元素都是数字),如[10, 1, 5].sort会产生[1, 10, 5]。也可以利用参数func指定规则,func(v1, v2)如果v1<v2则返回-1(其实负值就行)。
- concat(arguents):连接数组,可以传入任意多个参数,如[1, 2].concat(3, [4, 5], 6)会返回[1, 2, 3, 4, 5, 6],注意该函数没有改变数组本身,而是返回了一个新对象。
- slice(i1, i2):提取子数组,与String中的slice类似,同样没有改变原数组,而是返回了新的对象。
- splice(i1, i2, ele1, ele2, ele3, ...):强大的方法,可以删除、插入、替换数组中的项。
- 删除:[1, 2, 3, 4, 5].splice(1, 3)会返回[2, 3, 4]而使原数组变成[1, 5]。
- 插入:[1, 2, 3].splice(2, 0, -1, -3)会返回[]而使原数组变成[1, 2, -1, -3, 3]。
- 替换:[1, 2, 3, 4, 5].splice(2, 2, -1, -2)会返回[3, 4]而使原数组变成[1, 2, -1, -2, 5]。
- indexOf(ele, i)和lastIndexOf(ele, i),返回指定元素的索引值,参考String类型的同名函数。
- some(func):对每一项执行func,若有一项返回true,该函数返回true。如[1, 2, 3].some(function(ele){return ele<1;})返回false。
- every(func):数组中的每一项都使func返回true,则返回true。如[1, 2, 3].every(function(ele){return ele<5})返回true。
- filter(func):返回一个子数组,其中的每一项元素都使func返回true。如[1, 2, 3].filter(func(ele, index){return index%2 == 0;})返回[1, 3]。
- forEach(func):对每一项元素都执行func,无返回值。如var arr=[]; [1, 2, 3].forEach(function(ele, index){arr.push(index);})返回[0, 1, 2]。
- map(func):对每一项元素执行func,并返回由返回值构成的数组。如[1, 2, 3].map(function(ele){return -ele;})返回[-1, -2, -3]。
- 以上五个迭代方法,func的签名都是func(ele, index, arr),三个参数分别表示数组项、索引值和原数组。如果想改变原数组,可使用arr[index]。
- reduce(func, ori):归并所有项并构建一个最终返回值,func为归并方法。如[1,2,3].reduce(function(prev, cur){return prev*2+cur}, -1)返回3,即(((-1)*2+1)*2+2)*2+3。
- 以上两个归并方法func的签名是func(prev, cur, index, arr),分别表示前一项,当前项,索引值和原数组。第一次归并时,prev取ori,若ori没有指定,默认为0。
reduceRight(func, initial):迭代从数组尾部开始。
JavaScript备忘录(1)——内置类型的更多相关文章
- javascript 内置类型
JavaScript有七种内置类型: 空类型:null 未定义:undefined 布尔:boolean 数字:number 字符串:string 对象:object 符号:symbol(ES6新增) ...
- javascript 判断对象的内置类型
判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.在toString方法被调用时,会执行下面的操作步骤:1. 获取this对象的[[Class ...
- Dart基础学习02--变量及内置类型
Dart基础学习02--变量及内置类型 Dart中的变量 首先看一个变量的定义和赋值 var name = 'Bob'; 在Dart中变量名都是引用,这里的name就是一个指向值为Bob的字符串的引用 ...
- golang的内置类型map的一些事
golang的map类型是一个比较特殊的类型,不同于int, string, byte这样的基本类型,在经过一番探究之后得出了一些结论: 1.golang的map类型虽然是内置类型,但和基本类型有很大 ...
- Python——内置类型
Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buf ...
- javascript中的内置对象
2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...
- C++内置类型对象之间的转换
C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上. 隐式类型转换发生在下列这些典型情况下. 1. 在混合类型的算数表达式中 规则:在这种情况下最宽的数据类型成为目标转 ...
- C++ - 内置类型的最大值宏定义
内置类型的最大值宏定义 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24311895 C++中, 常常会使用, 某些类型的最大值 ...
- C++基本内置类型
C++基本内置类型 基本内置类型包括算术类型和空类型. 算术类型 算术类型包括整型和浮点型. 类型 含义 最小尺寸 bool 布尔型 - char 字符型 8 bit wchar_t 宽字符型 16 ...
随机推荐
- com组件远程桌面rdp模块的调用
rdp(remote desktop protocol)是一个多通道的协议,包括客户端视音传输.文件传输和通讯端口转向等等功能,通过压缩处理的数据网络传输也是相当快.我们在windows操作系统下面, ...
- paip.获取地理位置根据Ip
paip.获取地理位置根据Ip html转换txt 正则表达式截取mid 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- JQ属性和css部分测试
1.attr(name|properties|key,value|fn) 设置或返回被选元素的属性值. <div class="attr">设置或返回被选元素的属性值 ...
- python类的特性
#encoding=utf-8 class Province: #静态字段 memo = '这里是静态变量' def __init__(self,name,capital,leader,flag): ...
- shell 时间统计脚本
#!/bin/sh #Today=`date +%Y%m%d` YEAR=`echo $|cut -c -` MONTH=`echo $|cut -c -` DAY=`echo $|cut -c -` ...
- 淘宝TOP之API测试
下面的文章,是很早之前写的.内容过时了.主要是获取session的方法,很简单了.作为一个中小型网站开发者,淘宝API的开放大大缩短了网站的开发周期和运作效率,面对海量的数据,开发者只要仔细阅读开发文 ...
- 教你如何删除WIN7系统文件以及无法删除的文件
http://jingyan.baidu.com/article/2f9b480d6d42ce41cb6cc2cc.html 我不怎么会说话,就简单明了的说吧!当我们想删除一个文件时提示无法删除,有些 ...
- Entity Framework一对多关系添加数据的两种方式
当使用Entity Framework添加一对多关系数据的时候,通常先添加一的数据,然后再添加多的数据.类似这样: //添加一的数据 var category = new Category{Name= ...
- 【转】JAVA 接口
1.定义接口 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] inter ...
- Web - 客户端存储的几种方式
客户端存储主要方便一些APP离线使用.今天就来说说客户端存储的方法有多少? 说在最前面的一句:所有的客户端存储都有一个原则:读写的数据必须要同域 1 Cookie Cookie是一项很老的技术的,就是 ...