[js] 变量 操作符 对象

来源:互联网 发布:浙江软件考试成绩查询 编辑:程序博客网 时间:2024/05/20 03:07

关键字和保留字

数据类型
基本数据类型: Undefined, Null, Boolean, Number, String
复杂数据类型: Object(由一组无须名值对组成)
基本数据类型是按值访问的(保存在栈内存中),引用类型的值是保存在堆内存中的对象。js不允许直接访问内存位置,因此在操作对象时实际操作的是对象的引用而非对象本身
在为对象添加属性时操作的是对象本身(或者说会通过引用访问到对象)
可以使用typeof来判断

var a;          typeof a; // undefinedvar b = null;   typeof b; // objectvar c = 'abc';  typeof c; // stringvar d = true;   typeof d; // booleanvar e = 123;    typeof e; // numbervar f = {};     typeof f; // object

undefined派生自null,因此null == undefined

Number
浮点数使用IEEE754,因此计算精度不如整数

0.1 + 0.2 // 0.300000000000000040.1 + 0.2 == 0.3 // false

无穷大(Infinity)和无穷小(-Infinity)无法参与运算

Number.NEGATIVE_INFINITY // -InfinityNumber.POSITIVE_INFINITY // Infinity// 可以用isFinite判断是否是有穷数,是则返回trueisFinite(0) // trueisFinite(2e308) // false 

NaN(Not a Number)表示一个本来要返回数值但却未返回数值的情况
- 涉及NaN的任何操作都返回NaN
- NaN与包括本身在内的任何数值都不相等
- isNaN函数可用于判断,isNaN本身会做转换

1/0 // Infinity-1/0 // -Infinity0/0 // NaNNaN*10 // NaNNaN == NaN // falseisNaN(NaN) // trueisNaN('10') // falseisNaN('re') // true 

String

Object
Object类型是所有它的实例的基础
通过对象字面量定义对象不会调用Object构造函数

// 会修改全局Object函数,慎用Object = function() {    console.log('wulala');}var a = new Object(); // wulalaVar b = {} // 

Array
如果设置索引超过数组长度,数组会自动增加到该索引加1的长度
数组的length属性可以修改,修改后新项为undefined
判断可使用Array.isArray()方法

sort方法
sort默认是对字符进行排序 15<5
- 可传入一个函数方法作为比较方法

function compare(val1, val2) {  if(val1.num < val2.num) {    return 1; // 交换  } else if (val1.num > val2.num) {    return -1; // 不交换  } else {    return 0; // 不交换  }}var arr = [{num:3}, {num:2}, {num:3}, {num:0}, {num:9}];arr.sort(compare);arr; // [{num:9}, {num:3}, {num:3}, {num:2}, {num:0}]

concat, slice
两者都不会影响原来的数组而回返回一个新数组
两者都是浅复制

var a = [1, 2, 3];var b = [5, 'a'];a.concat('sdf', b, b); // [1, 2, 3, "sdf", 5, "a", 5, "a"]a; // [1, 2, 3]a.slice(1) // [2, 3]a.slice(1, 2) // [2]a.slice(-2, -1) // [2] 会加上数组长度a.slice(2, 1) // []

splice
三个参数代表起始位置,删除项数(可为0),插入项

var a = [1, 2, 3];a.splice(0, 1); // [1]a; // [2, 3]a.splice(0, 0, 'a', 'd'); // []a; // ['a', 'd', 2, 3]a.splice(2, 2, ['b', 'c']) // [2, 3]a; // ['a', 'd', ['b', 'c']]

Function

RegExp

基本包装类型
Boolean, Number, String
在读取基本类型时后台会创建一个对应的基本包装类型的对象,调用方法是的步骤为:
1. 创建一个实例;
2. 在实例上调用方法;
3. 销毁实例。
使用new调用构造函数和调用转型函数结果不同

var a = 123;var b = false;var num = Number(a);var obj = new Number(a);var boo = Boolean(b);var objB = new Boolean(b);typeof num // numbertypeof obj // objectboo || false // falseobjB && true // true

单体内置对象
无需显示实例化
Global
Math

类型转换
转换为Boolean类型

String      非空字符    true     ''          falseNumber      非零数     true      0,NaN       falseObjectnull     true     null        falseUndefined                       undefined   false

转换为Number类型
- 使用Number转化任意类型

String          只包含数字 转换为十进制    包含浮点格式 转换为浮点    包含十六进制 转换为对应十进制    空 转换为0    其他 转换为NaNBoolean    true 1    false 0Null    0Undefined    NaNObject    调用valueOf方法,若结果为NaN,调用toString方法(测试发现无效仍然为NaN)
var a = '123.4';var b = '0x1b';var c = null;var d;var e = {};e.valueOf = function () { return NaN; }e.toString = function () { return '12'; }Number(a); // 123.4Number(b); // 27Number(c); // 0Number(d); // NaNNumber(e); // NaN
  • 使用parseInt转化字符串
    由于标准不同,建议带上第二个参数制定转换进制
var num = parseInt('AF', 16) // 175
  • 使用parseFloat转化字符串

转化为string类型
- toString
null与undefined没有toString方法
数字的toString可以带进制参数

// professional js for web developers p34var num = 10;num.toString(); // 10num.toString(2); // 1010num.toString(16); // a
  • String方法转化
    调用toString方法
    如果为null,返回null
    如果为undefined,返回undefined

操作符

var aa;var bb = null;aa + bb // NaNaa + aa // NaNbb + bb // 0

语句
with 设置代码作用域
严格模式下不能使用,且会导致性能下降(延长作用域)

var a = obj.func1();var b = obj.func2();with(obj) {    a = func1();    b = func2();}
0 0
原创粉丝点击