数组

  • 比较时的隐式转化
var a = [1,2,3];
var b = [1,2,3]; a == b; //false
a == '1,2,3'; //true; //
var c = [];
Boolean(c); //true
c == false; //true
c == 0; //true
c == ''; //true
c == undefined; //false
  • 类数组
var arr = Array.prototype.slice.call( arguments );
//es6
var arr = Array.from( arguments );
  • 字符串使用数组方法
var a = "foo";

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 c = Array.prototype.reverse.call( a ); //error var c = a.split( "" ).reverse().join( "" );
  • 关于undefined
var a = [ undefined, undefined, undefined ];  //[ undefined, undefined, undefined ]
var b = new Array( 3 ); //[ undefined x 3 ]
var c = [];
c.length = 3; //[ undefined x 3 ]
var d = [ , , , ]; //[ undefined x 3 ] a.join( "-" ); // "--"
b.join( "-" ); // "--" a.map(function(v,i){ return i; }); // [ 0, 1, 2 ]
b.map(function(v,i){ return i; }); // [ undefined x 3 ] //确实想要表示多个空值而不是不存在;
var a = Array.apply( null, { length: 4 } );
a; // [ undefined, undefined, undefined ,undefined]

数值

  • 浮点数精确度
0.1 + 0.2 === 0.3; // false

//

if (!Number.EPSILON) { //es6
Number.EPSILON = Math.pow(2,-52);
}
function numbersCloseEnoughToEqual(n1,n2) {
return Math.abs( n1 - n2 ) < Number.EPSILON;
} var a = 0.1 + 0.2;
var b = 0.3; numbersCloseEnoughToEqual( a, b ); // true
numbersCloseEnoughToEqual( 0.0000001, 0.0000002 ); // false
  • 判断正负0
function isNegZero(n) {
n = Number( n );
return (n === 0) && (1 / n === -Infinity);
}
  • 数值化(Number)

    • 对于原始类型: false//0, true//1, null//0, 数值字符串//数值, 其他//NaN;
    • 对于其他类型: 调用其valueOf, toString,对返回的原始类型进行操作;否则报错;
Number( "" );           // 0
Number( [] ); // 0
  • 小心使用parseInt, 它也会调用内部的toString方法;
parseInt( 1/0, 19 ); =>parseInt( "Infinity", 19 ) => parseInt( "I", 19 ) // 18;

parseInt( 0.000008 );       // 0   ("0" from "0.000008")
parseInt( 0.0000008 ); // 8 ("8" from "8e-7")
parseInt( false, 16 ); // 250 ("fa" from "false")
parseInt( parseInt, 16 ); // 15 ("f" from "function..") parseInt( "0x10" ); // 16
parseInt( "103", 2 ); // 2

对象

  • 对象引用
//引用被切断
function foo(x) {
x.push( 4 );
x; // [1,2,3,4] // later
x = [4,5,6]; //改变arg[x]的引用
x.push( 7 );
x; // [4,5,6,7]
} var a = [1,2,3]; foo( a ); a; // [1,2,3,4] not [4,5,6,7] //引用一直保存
function foo(x) {
x.push( 4 );
x; // [1,2,3,4] // later
x.length = 0; // empty existing array in-place
x.push( 4, 5, 6, 7 );
x; // [4,5,6,7]
} var a = [1,2,3]; foo( a ); a; // [4,5,6,7] not [1,2,3,4] //注意特殊对象的隐式转化
function foo(x) {
x = x + 1;
x; // 3
} var a = 2;
var b = new Number( a ); // or equivalently `Object(a)` foo( b );
console.log( b ); // 2, not 3

void操作符

  • 使不返回任何值
//可能用到的情况
function doSomething() {
// note: `APP.ready` is provided by our application
if (!APP.ready) {
// try again later
return void setTimeout( doSomething, 100 );
} var result; // do some other stuff
return result;
}

等值判断

//es6
Object.is( a,b ); 不用于严格意义的对比,而是用于特殊例子的比较 var a = 2 / "foo";
var b = -3 * 0; Object.is( a, NaN ); // true
Object.is( b, -0 ); // true Object.is( b, 0 ); // false

预定义数值

if(VALUE) {
console.log('value');
} //error if(typeof VALUE !== "undefined") {
console.log('value')
} //
function () {
var newValue = (typeof oldValue !== "undefined") ? oldValue : 'newvalue';
...
} function (oldValue) {
var newValue = oldValue || 'newvalue';
...
}

js原生类型

  • String()
  • Number()
  • Boolean()
  • Array()
  • Object()
  • Function()
  • RegExp()
  • Date()
  • Error()
  • Symbol() -- added in ES6!
由于所有类型的本源都是来自Object(),使用Object.prototype.toString.call方法可以现在类型内部的[[class]];
格式为[object X]
  • 构建时注意
//Object
var a = new Object();
var b = Object();
var c = new Object; //Array
var a = new Array();
var b = Array();
var c = new Array; //Date
var a = new Date(); //[object Date];
var b = Date(); //string
var c = new Date; //[object Date];
  • 各个类型的原型都是其相对应类型的空值;//注意不要污染它们;
Array.prototype; //[];
......

js整理1的更多相关文章

  1. Dynamics CRM 日常使用JS整理(二)

    BPF(Business Process Flow)相关的JS 为Stage添加changed或者selected事件: function fnOnLoad() { Xrm.Page.data.pro ...

  2. Dynamics CRM 日常使用JS整理(一)

    整理下平时CRM开发中用到的一些基本的js操作 取值: var oResult = Xrm.Page.getAttribute(sFieldName).getValue(); var oResult ...

  3. js整理

    Js脚本语音 网页里面使用的脚本语音 基础语法 注释语法  单行注释// 多行注释/**/ 嵌入js代码  尽量靠下写  用<script type="text/javascript& ...

  4. Vue.js 整理笔记

    以前我们用Jquery进行dom的操作,虽然熟悉后开发效率很高,但是如果多个控件的相互操作多的情况下,还是会乱.相比之下,Vue的使用更加清晰,通过虚拟dom将数据绑定,而且组件化和路由的帮助下,让整 ...

  5. js整理3

    函数 call: fun.call(a), a会转化成相应的对象,函数内的this即指向它; function foo() { console.log(this); } foo.call(null); ...

  6. node.js整理 07例子

    需求 一个简单的静态文件合并服务器,该服务器需要支持类似以下格式的JS或CSS文件合并请求. http://assets.example.com/foo/??bar.js,baz.js 在以上URL中 ...

  7. node.js整理 06异步编程

    回调 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了 function heavyCompute(n, callback) { var count = 0, i, j; for (i = ...

  8. node.js整理 05进程管理

    简介 NodeJS可以感知和控制自身进程的运行环境和状态,也可以创建子进程并与其协同工作,这使得NodeJS可以把多个程序组合在一起共同完成某项工作,并在其中充当胶水和调度器的作用 常用API Pro ...

  9. node.js整理 03文件操作-遍历目录和文本编码

    遍历目录 递归算法 遍历目录时一般使用递归算法,否则就难以编写出简洁的代码. 递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题 function factorial(n) { if (n = ...

随机推荐

  1. codeforces 490B.Queue 解题报告

    题目链接:http://codeforces.com/problemset/problem/490/B 题目意思:给出每个人 i 站在他前面的人的编号 ai 和后面的人的编号 bi.注意,排在第一个位 ...

  2. replace和replaceAll(路径反斜杠问题)

    转载自:http://www.cnblogs.com/zhenmingliu/archive/2012/01/13/2321560.html 1)replace的参数是char和CharSequenc ...

  3. HTML 样式表

    样式代码 样式代码与属性代码区别   样式代码必须带单位 属性不需要  多个样式代码之间用分号隔开  同一个样式里面 用空格  多个属性之间用空格隔开    举例 1.背景样式 .r { backgr ...

  4. LeetCode 263 Ugly Number

    Problem: Write a program to check whether a given number is an ugly number. Ugly numbers are positiv ...

  5. 解决SQL Server的cannot resolve the collation conflict问题

    当没有牵涉到两个不同的数据库时,出现以上错误.   Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" ...

  6. 月考(cogs 1176)

    [题目描述] 在上次的月考中Bugall同学违反了考场纪律还吃了处分,更可气的是在第二天的校会时 间学校就此事做了全校通报. 现已知在当天校会时间有总共N个同学听到了有关Bugall的处分决定.  B ...

  7. 二叉树计数(codevs 3112)

    题目描述 Description 一个有n个结点的二叉树总共有多少种形态 输入描述 Input Description 读入一个正整数n 输出描述 Output Description 输出一个正整数 ...

  8. 分享类shareSDK

    1.新浪微博分享时需要注意: [A] 应用信息->基本信息->应用地址 [B] 应用信息->高级信息->OAuth2.0 授权设置 //当使用新浪微博客户端分享的时候需要按照下 ...

  9. poj1733(种类并查集+离散化)

    题目链接: http://poj.org/problem?id=1733 题意: 输入n表示有一个长度为n的0,1字符串, m表示接下来有m行输入, 接下来的m行输入中x, y, even表示第x到第 ...

  10. Swift - 让程序挂起后,能在后台继续运行任务

    1,程序的挂起和退出 由于iOS设备资源有限.当用户点击了home键,或者另一个应用程序启动了.那么原先那个程序便进入后台被挂起,不是退出,只是停止执行代码,同时它的内存被锁定.当应用程序恢复时,它会 ...