js权威指南学习笔记1

// 科学计数法
console.log(10e23);  // 10* 10的23次方
console.log(1e-20);  //  1*  10的-20次方

// Math 数学部分函数
var math = Math.pow(2,53);  // 2的53次方
math = Math.pow(4,1/2);  // 4的平方根
math = Math.round(.6); // 四舍五入
math = Math.ceil(.6);
math = Math.floor(.6);
math = Math.abs(-5);
math = Math.max(1,2,3);
math = Math.min(1,2,3);
math = Math.random();
math = Math.PI;
math = Math.E;    //  这是一个欧拉常数和自然对数的基数,约为 2.718.
math = Math.sqrt(4);
math = Math.sin(10);
math = Math.log(1000)/Math.LN10;  // 对数 10为底100的对数
math = Math.log(512)/Math.LN2;
math = Math.exp(1);  // E的1次幂运
math = Infinity;   // 溢出数字
math = -Infinity; 
math = -0 / 0;  // NaN
math = Infinity / -Infinity; // NaN
math = Infinity / 0; // 正无穷大
math = Infinity / -0; // 负无穷大
math = -Infinity / -0; // 负负得正 正无穷大
math = Number.POSITIVE_INFINITY;  // 正无穷大
math = 1 / 0; // 正无穷大
math = Number.MAX_VALUE+1;  // 最大值, 值不变  
math = Number.MIN_VALUE/2; // 发生下溢 结果0
math = -Number.MIN_VALUE/2; // -0
math = Number.NEGATIVE_INFINITY; //负无穷大
math = -1 / 0;
math = NaN;   // NaN != NaN   用!=判断NaN比较好
math = -1 / Infinity;  // -0
math = 0 == -0; // true
math = 0 === -0; // true
math = Infinity == -Infinity; // false

// 小数计算注意 0.3 - 0.2 有bug


// Date 日期部分函数
math = new Date(2018,0,0); // 设置日期
math = new Date(2011,1,1,17,10,30); // 详细设置
math = new Date(); // 当前日期
math = new Date(2011,1,1,17,10,30).getTime() - new Date(2010,1,1,17,10,30).getTime(); // 日期减法,获得间隔时间毫秒
math = math/1000/3600/24; // 利用毫秒计算日期   => 365
date = new Date();
math = date.getFullYear();
math = date.getDate();
math = date.getDay();  // 0-6 0代表星期日
math = date.getHours();
math = date.getMinutes();
math = date.getSeconds(); //
math = date.getMilliseconds(); // 毫秒
math = date.getUTCHours(); // UTC时间



// String 字符串部分函数
var s = 'Hello world\
\
6666';   // \斜线换行写代码  也可以转义
math = s.length;  // 字符串的长度
math = s.charAt(1);  // 传入位置,获得位置的值
math = s.charAt(s.length-1); // 获得最后一个值
math = s[s.length-1];  // 获取最后一个值
math = s.slice(开始位置,结束位置); // 可以用负数  可以不填参数
math = s.substring(6,1);  // 开始位置 < 结束位置  就交换位置
math = s.indexOf('H');
math = s.indexOf('H',3);  // 设置开始查找的位置
math = s.lastIndexOf("l");
math = s.split('');  // 字符串分割成数组
math = s.replace('Hello', 'Hi'); 
math = s.toLowerCase();
math = s.toUpperCase();


// RegExp  正则部分函数
var pattern = /\d+/g;
math = pattern.test(s);  // 找到? true / false
math = s.search(pattern);  // 找到? 返回位置
math = s.match(pattern); // 找到? 返回找到的值
math = s.replace(/\d/g,'H') // 正则替换, g全局
math = s.split(/\D+/); // 非数字字符截取字符串


// undefined null 0 -0 NaN "" === false

// undefined == null    不全等

// 类型转换
math = parseInt(s);
math = parseFloat(s);
math = new String(s);
math = new Number(s);
math = new Boolean(s);
math = s.toString(8);  // 参数可加可不加,转换进制  
math = parseInt('0777',8); // 传入的数字0777是八进制,然后要转换10进制

// 两个数组或者对象值相等,但是他们永远不相等

var arr1 = [];
var arr2 = arr1;   // 两个数组在一起,一个修改另一个一起变 
arr1 == arr2 ;   // 引用所以相等


math = n.toFixed(1); // 保留几位小数,自动四舍五入
math = n.toExponential(6); // 转换为指数, 参数代表显示几位数字

// 日期对象
date = new Date();
math = date-1;  // 数字  毫秒
math = date+1;  // 字符串 当前的时间

math = new Object; // 没有参数圆括号可以省略

// delete 操作符,不能删除全局变量,函数
// 删除数组元素 数组长度不变,那个元素变成empty
var x = 1;
delete x; // false;
function a() {};
delete a; // false;

// eval('a+1'); 相等于js解释器
var geval = eval;  // 使用别名调用eval将是全局eval
var x = "global", y = "global";

function f() {
    var x;
    eval("x += 'changed'");  // 只能修改局部变量
}

function g() {
    geval('y = 100'); // 修改的是全局
}
f();
g();
console.log(x,y);

// with
// 如果 o 对象有x属性,就修改,没有,x就是全局变量
with(o) x = 1;  // 如果有就修改


var o1 = Object.create(o2);   // o1 和 o2 关联了

// 对象方法

var obj = { x:1 };
obj.hasOwnProperty('x');  // 判断x属性是否是自有属性
obj.propertyIsEnumerable('x'); // 判断x属性是否可枚举

Object.keys(obj); // 返回自有属性数组 可枚举的
Object.getOwnPropertyNames(obj); // 返回对象所有自有属性的名称

// get set
var k = {
    data_prop: 111,
    // set 是属性 尴尬
    get accessor_prop() { return this.data_prop; },
    set accessor_prop(value) { this.data_prop = value; }
}

k.accessor_prop = 1;  // set
k.accessor_prop; // get

Object.defineProperty(obj, "x", {  // 设置对象属性的特性
    value: 1,  //
    writable: true, // 可修改?
    enumerable: false,  // 可枚举?
    configurable: true  // 可配置? delete
})

Object.getOwnPropertyDescriptor(k,"x") // 获得自有属性的的特性

// 设置对象多个属性和特性
var Obj = Object.defineProperties({},{
    y: { value:1, writable: true, enumerable: true, configurable: true },
    x: { value:1, writable: false, enumerable: false, configurable: false},
    r: {
        get: function() { return Math.sqrt(this.x*this.x+this.y*this.y) },
        enumerable: true,
        configurable: true,
    }
})

// 获取对象的真正原型
Object.getPrototypeOf(k);
obj.constructor.prototype;

var obj1 = {};
var obj2 = Object.create(obj1);  
obj1.isPrototypeOf(obj2); // true 检测一个对象是否是另一个对象的原型

// 可扩展性

var o = {x:1};
Object.preventExtensions(o); // 不可扩展
o.y = 1; // 没用
console.log(o.y); // undefined 
console.log(Object.isExtensible(o)); // 对象是否可扩展?

Object.seal(o); // 封闭对象,属性不能删除/配置, 也不能添加新属性
// 不过可写属性,可以修改,本来的属性可以修改
console.log(Object.isSealed(o)); // true 是否是封闭对象?

Object.freeze(o); // 冻结对象 自有的属性设置为只读
console.log(Object.isFrozen(o)); // true 是否是冻结对象?

var json = {
    x:1,
    y:2,
    z:3
}

var jsonStr = '{"x":"1"}';

console.log(JSON.stringify(json,null, ' ')); // 转换为JSON对象 后面两个参数可以不加,只是打印好看
console.log(JSON.parse(jsonStr)); // 将JSON字符串转换为js对象

console.log(new Date().toString()); // 普通 Sun Jul 29 ...
console.log(new Date().toLocaleString()); // 本地化格式字符串 更加简洁 2018/7/29 ...

猜你喜欢

转载自www.cnblogs.com/mutaim/p/9386158.html
今日推荐