字符串

  • 类型
var a = "abc";
var b = new String( a );
var c = Object( a ); typeof a; // "string"
typeof b; // "object"
typeof c; // "object" a instanceof String; // false
b instanceof String; // true
c instanceof String; // true Object.prototype.toString.call( a ); // "[object String]"
Object.prototype.toString.call( b ); // "[object String]"
Object.prototype.toString.call( c ); // "[object String]"
  • 字符串化(String)

    • 原始类型会返回其字符形式
    • Array,Function,Object, Date等会返回其自定义的toString方法的返回值;其中Object默认的是Object.prototype.toString(),即返回[object Object]

布尔类型

  • 布尔化(Boolean)
//除了下面的几种,其他都会转化为true
undefined
null
false
+0, -0, and NaN
""
//特殊
document.all //注意Boolean并没有调用toString,valueOf转化
Boolean([]) //true;
  • 判断
a || b;
// roughly equivalent to:
a ? a : b; a && b;
// roughly equivalent to:
a ? b : a;
........ // good enough (works implicitly):
if (a) {
// ..
} // better (works explicitly):
if (!!a) {
// ..
} // also great (works explicitly):
if (Boolean( a )) {
// ..
}

json字符化

JSON.stringify( "42" ); // ""42"" (a string with a quoted string value in it)
JSON.stringify( undefined ); // undefined
JSON.stringify( function(){} ); // undefined
JSON.stringify( [1,undefined,function(){},4] ); // "[1,null,null,4]"
JSON.stringify( { a:2, b:function(){} } ); // "{"a":2}"
  • 对于对象,如果包含不合法的json值或者其他问题,必须定义一个toJSON方法进行安全的操作;(所有实际上stringify就是字符串化toJSON返回的值)
var o = { };

var a = {
b: 42,
c: o,
d: function(){}
}; // create a circular reference inside `a`
o.e = a; // would throw an error on the circular reference
// JSON.stringify( a ); // define a custom JSON value serialization
a.toJSON = function() {
// only include the `b` property for serialization
return { b: this.b };
}; JSON.stringify( a ); // "{"b":42}"
  • 第二参数,用于选择/替换,为ArrayFunction;
var a = {
b: 42,
c: "42",
d: [1,2,3]
}; //选择对象属性 JSON.stringify( a, ["b","c"] ); // "{"b":42,"c":"42"}" JSON.stringify( a, function(k,v){
if (k !== "c") return v;
} );
// "{"b":42,"d":[1,2,3]}"
  • 第三参数,用于占为,应该为String
JSON.stringify( a, null, "-----" );
// "{
// -----"b": 42,
// -----"c": "42",
// -----"d": [
// ----------1,
// ----------2,
// ----------3
// -----]
// }"

特殊字符~

  • 效果相当于-(x + 1);

  • 用于判断indexOf: 由于没有查找到都返回-1, ~-1 = 0 // false;

  • 无进位去小数

Math.floor(54.5);     //54
Math.floor(-54.5); //-55
Math.ceil(54.5); //55
Math.ceil(-54.5); //-54
~~54.5 //54
~~-54.5 //-54

特殊字符+

  • 对象和原始类型或对象和对象进行时,会分别调用对象的valueOf, toString方法转化成原始类型后处理
var a = [1,2];
var b = [3,4]; a + b; // "1,23,4" //注意{}
{} + []; //0
({}) + []; //[object Object] //
var a = {
valueOf: function() { return 42; },
toString: function() { return 4; }
}; a + ""; // "42" String( a ); // "4"
  • 注意其他算术符号都是数值化的
'1' - 0; //1
[] * []; //0

比较

不严格相等

  • 数值和字符串判断,字符串转化为数值;
  • 任何值和布尔值判断,都转化为数值;
  • 只有undefinednull自我或相互判断时才相等
  • 对象和非对象判断,先将对象转化为原生类型(分别调用valueOf,toString)
"foo" == [ "foo" ];       // true
[] == ![]; // true
0 == "\n"; => 0 == " " // true //用于判断undefined和null
if (a == null) {
//...
}

大小比较

  • 数值/布尔值和其他类型比较,都先转化为数值;其他情况都先转化为字符串;
true > [] //true

//
var a = { b: 42 };
var b = { b: 43 }; a < b; // false
a > b; // false
a == b; // false
a <= b; // true => [object Object] == [object Object]
a >= b; // true

js整理2的更多相关文章

  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. js整理1

    数组 比较时的隐式转化 var a = [1,2,3]; var b = [1,2,3]; a == b; //false a == '1,2,3'; //true; // var c = []; B ...

  7. node.js整理 07例子

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

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

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

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

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

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

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

随机推荐

  1. 解决Odoo出现的Unable to send email, please configure the sender's email address or alias.

    这是由于当前登录用户的邮件地址信息缺失造成的,需要设置其邮件地址. 方法:使用创建该用户的管理员帐号登录系统,开启技术特性,在需要设置邮箱地址的用户界面点击相关的业务伙伴标签链接,如图所示:

  2. SQL常用命令整理

    1.增加字段 alter table docdsp     add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME DROP COLUMNcolum ...

  3. 修改VS2010生成的dll文件中的内容

    我的电脑是64为的操作系统,所以先找到下面的路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 找到这个文件:ildasm.exe,如 ...

  4. iOS开发MAC下配置Svn和Git

    如果你对iOS开发中的版本控制还不了解那么你可以先看看这篇(大致看一遍就ok) http://www.cnblogs.com/iCocos/p/4767692.html   关于版本控制使用起来并不难 ...

  5. Python简易聊天工具-基于异步Socket通信

    继续学习Python中,最近看书<Python基础教程>中的虚拟茶话会项目,觉得很有意思,自己敲了一遍,受益匪浅,同时记录一下. 主要用到异步socket服务客户端和服务器模块asynco ...

  6. Cannot change version of project facet Dynamic Web Module to 3.0

    背景描述: 最近在开发项目时,老是报错说:Project is not Dynamic Web Module 3.0.右击项目选择属性进行修改时出现以下错误: 这让我很是恼火,后来终于找到了万能的解决 ...

  7. HTML标记之Form表单

    一.表单的作用 从访问的Web站点的用户那里获得信息.访问者可以使用诸如文本域.列表框.复选框以及单选按钮之类的表单元素输入信息,然后单击某个按钮提交这些信息.是客户端与服务器端的交流途径. 二.说明 ...

  8. [SQL Server]如何快速查找使用了某个字段的所有存储过程

    [SQL Server]如何快速查找使用了某个字段的所有存储过程       当一个系统中使用了很多的表,并且存在大量的存储过程,当数据库中的某个表删除了某个字段,那么相应的存储过程也需要改动,但是我 ...

  9. August 13th 2016 Week 33rd Saturday

    What makes life dreary is the want of motive. 没有目标与动力,生活便会郁闷无光. Without dreams and hope, there will ...

  10. SQLServer触发器

    触发器的作用: 自动化操作,减少了手动操作以及出错的几率. 触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程. [在SQL内部把触发器看做是存储过程但是不能传递参数] 一般的存储过程 ...