简介
对象只是一种特殊的数据。对象拥有属性和方法。JavaScript
中所有事物都是对象。
创建对象
- 定义并创建对象的实例
var person = new Object();
person.name = "Carson";
person.age = 18;
- 使用构造器定义对象,然后创建新的对象实例
function student(name, age) {
this.name = name;
this.age = age;
}
var someStudent = student("John", 15);
对象方法
方法只不过是附加在对象上的函数。在构造器函数内部定义对象的方法:
function student(name, age) {
this.name = name;
this.age = age;
this.changeName = changeName;
function changeName(newName) {
this.name = newName;
}
}
someStudent = new student("John", 15);
someStudent.changeName("Jay");
console.log(someStudent);
打印结果:
student {name: "Jay", age: 15, changeName: ƒ}
遍历对象的属性
var x;
var text = "";
for (x in person) {
text = text + someStudent[x];
}
console.log(text);
打印结果:
Jay15
内建对象
Number
JavaScript
不是类型语言,只有一种数字类型。所有JavaScript
数字均为64位。
精度
- 整数
最多为15
位(不使用小数点或指数计数法)。
var x = 999999999999999; // x 为 999999999999999
var y = 9999999999999999; // y 为 10000000000000000
- 浮点数
最大位数是17
,但是浮点运算并不总是100%准确:
var x = 0.2 + 0.1; // 输出结果为 0.30000000000000004
- 八进制和十六进制
如果前缀为0
,则JavaScript
会把数值常量解释为八进制数,如果前缀为0x
,则解释为十六进制数。
var x = 0377; // 8进制
var y = 0xFF; // 16进制
方法
var myNumber = 128;
myNumber.toString(); // 返回 128
myNumber.toString(16); // 返回 80
myNumber.toString(8); // 返回 200
myNumber.toString(2); // 返回 10000000
无穷大
当数字运算结果超过了JavaScript
所能表示的数字上限,结果为一个特殊的无穷大infinity
值。同样地,当负数的值超过了JavaScript
所能表示的负数范围,结果为负无穷大-Infinity
。
var x = 2/0; // infinity
var y = -2/0; // -Infinity
非数字值
NaN
属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把Number
对象设置为该值,来指示其不是数字值。
使用isNaN()
全局函数来判断一个值是否是NaN
值。
var x = 1000 / "Apple";
isNaN(x); // 返回 true
var y = 100 / "1000";
isNaN(y); // 返回 false,数字除以一个字符串数字结果是一个数字
数字和Number对象
var x = 123;
var y = new Number(123);
typeof(x) // 返回 Number
typeof(y) // 返回 Object
String
一个字符串可以使用单引号或双引号:
var str = "hello world";
var str2 = 'hello world';
长度
str.length // 长度11
查找字符串
var str = "Hello world, welcome to the universe.";
var index = str.indexOf("welcome"); // 第一次匹配下标 13
var lastIndex = str.lastIndexOf("o"); // 最后一次匹配下标 22
内容匹配
var str = "hello world";
console.log(str.match("world")); // index: 6
console.log(str.match("world!")); // null
替换内容
var str = "hello world";
str.replace("world", "JavaScript");
字符串转为数组
var str = "hello world";
var arr = str.split(" "); // ["hello", "world"]
特殊字符
代码 | 输出 |
---|---|
\' | ' |
\" | " |
\\ | \ |
\n | 换行 |
\r | 回车 |
\t | tab |
\b | 空格 |
\f | 换页 |
字符串属性
length // 长度
prototype // 修改属性
constructor // 构造器
字符串方法
// 通过下标返回字符串
charAt(pos: number): string;
// 通过下标返回Unicode值
charCodeAt(index: number): number;
// 连接两个或多个字符串,返回连接后的字符串
concat(...strings: string[]): string;
// 返回字符串中检索指定字符第一次出现的位置
indexOf(searchString: string, position?: number): number;
// 返回字符串中检索指定字符最后一次出现的位置
lastIndexOf(searchString: string, position?: number): number;
// 用本地特定的顺序来比较两个字符串
localeCompare(that: string): number;
// 找到一个或多个正则表达式的匹配
match(regexp: string | RegExp): RegExpMatchArray | null;
// 替换与正则表达式匹配的子串
replace(searchValue: string | RegExp, replaceValue: string): string;
// 检索与正则表达式相匹配的值
search(regexp: string | RegExp): number;
// 提取字符串的片断,并在新的字符串中返回被提取的部分
slice(start?: number, end?: number): string;
// 把字符串分割为子字符串数组
split(separator: string | RegExp, limit?: number): string[];
// 从起始索引号提取字符串中指定数目的字符
substr(from: number, length?: number): string;
// 提取字符串中两个指定的索引号之间的字符
substring(start: number, end?: number): string;
// 把字符串转换为小写
toLowerCase(): string;
// 根据主机的语言环境把字符串转换为小写
toLocaleLowerCase(): string;
// 把字符串转换为大写
toUpperCase(): string;
// 根据主机的语言环境把字符串转换为大写
toLocaleUpperCase(): string;
// 移除字符串首尾空白
trim(): string;
// 返回某个字符串对象的原始值
valueOf(): string;
Date
创建日期
new Date() // 当前日期和时间
new Date(milliseconds) //返回从 1970 年 1 月 1 日至今的毫秒数
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)
设置日期
var myDate = new Date();
myDate.setFullYear(2018,0,14); // 2018 年 1 月 14 日
myDate.setDate(myDate.getDate()+5); // 2018 年 1 月 19 日
日期比较
var date = new Date();
date.setFullYear(2100,0,14);
var today = new Date();
if (x>today) {
alert("今天是2100年1月14日之前");
}
else {
alert("今天是2100年1月14日之后");
}
Array
创建数组
- 常规方式
var numbers = new Array();
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
- 简洁方式
var numbers = new Array(1, 2, 3);
- 字面
var numbers = [1, 2, 3];
数组方法
var value = numbers[0]; // 1
numbers[0] = 0; // 0
- 获取内容个数
var length = numbers.length; // 3
- 获取下标
var index = numbers.indexOf(2); // 1
- 转换字符串
var str = numbers.join(); // 0,2,3
- 删除最后一个
numbers.pop(); // [0, 2]
- 删除第一个
numbers.shift(); // [2]
- 追加
numbers.push(3); // [2, 3];
- 插入
// 参数一:插入的位置
// 参数二:删除的位置
// 参数三:插入的值
numbers.splice(0, 0, 1); // [1, 2, 3]
- 第一个位置添加
numbers.unshift(0); // [0, 1, 2, 3]
- 取出子数组
// start: 0, end: 2, 不包含2
var slice = numbers.slice(0, 2); // [0, 1]
- 倒序排列
numbers.reverse(); // [3, 2, 1, 0]
- 排序
// 按字母顺序
var newNumbers = numbers.sort();
// 按数字升序
var newNumbers = numbers.sort(function (a, b) {return a-b});
// 按数字降序
var newNumbers = numbers.sort(function (a, b) {return b-a});
创建新方法
Array.prototype.myUcase = function(){
for (i = 0; i<this.length; i++){
this[I] = this[i].toUpperCase();
}
}
Boolean
var reslut = new Boolean(); // false
result = true; // true
Math
算数对象的作用是:执行常见的算数任务
。 Math
对象无需在使用这个对象之前对它进行定义。
// 四舍五入
Math.round(2.5) // 结果 3
// 取0-1随机值
Math.random() // 结果为浮点
// 取随机整数
Math.floor(Math.random()*255) // 结果为整数 0-255
// 取最大值
Math.max(5,10) // 结果 10
// 取最小值
Math.min(5,10) // 结果 5
// 圆周率
Math.PI // 结果 3.141592653589793
// 取绝对值
Math.abs(-5) // 结果 5
// 取整
Math.ceil(0.3) // 结果 1
// 开方
Math.sqrt(16) // 结果 4
RegExp
当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。比如,以下是等价的:
var re = new RegExp("\\w+");
var re = /\w+/;
修饰符
- i 修饰符是用来执行不区分大小写的匹配。
- g 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)。
var patt = /hello/i;
方法
test()
方法搜索字符串指定的值,根据结果并返回真或假。
var patt = new RegExp("e");
patt.test("The best things in life are free"); // true
exec()
方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
var patt = new RegExp("e");
patt.exec("The best things in life are free"); // e index: 2