1.使用Number()和parseInt() parseFloat()转换区别。

详见《JavaScript高级程序设计》P30

Number()可以针对任何类型。
parseInt()和parseFloat()都只针对字符串
1.转换空字符串
Number("");//0
parseInt("");//NaN
2.转换包含数字的字符串
console.log(parseInt("1234Blue"));//1234
console.log(parseInt("Blue1234"));//NaN console.log(Number("1234Blue"));//NaN
console.log(Number("Blue1234"));//NaN

parseInt()从第一个非空格字符开始解析,直到遇到第一个非字符数字;

parseFloat()从第一个非空格字符开始解析,直到遇到第一个无效的浮点数字字符。(遇到第二个小数点就无效了)

3.parseInt()可指定转换基数,即将字符串按照十进制数值转换成指定进制的数。
console.log(parseInt("10",2));
console.log(parseInt("10",8));
console.log(parseInt("10",10));
console.log(parseInt("0xA"));//10
console.log(parseInt("0xA",16));//10
console.log(parseInt("0xA",10));//0

为避免错误的解析,任何时候都要明确指定基数

4.parseFloat()不能解析十六进制等其他进制,只能解析十进制
console.log(parseFloat("0xA"));//0
console.log(parseInt("0xA"));//10

2.两种涉及转换数据进制的方法 toString()、parseInt()

var n=10;
console.log(n.toString(2));//1010
console.log(parseInt(n,2));//2
  • n.toString(2)是返回把数值转换为相应进制(2)的字符串
  • parseInt(n,2)是把字符串按照指定进制(2)来解析为十进制数据

3.toString()方法和String()方法的区别

//console.log(null.toString());报错
//console.log(undefined.toString());报错 console.log(String(null));//"null"
console.log(String(undefined));//"undefined"
  • null和undefined没有toString()方法,使用会报错。数值、布尔值、对象、字符串有这个方法。
  • String()能将任何类型的值转换为字符串,包括null和undefined

4.自增自减操作符用在其他非数值值。

var s1="2";
var s2="z";
var b=false;
var f=1.1;
var o={
valueOf: function(){
return -1;
}
}; s1++;
s2++;
b++;
f--;
o--; console.log(s1);//3
console.log(s2);//NaN
console.log(b);//1,若b之前为true则++后为2
console.log(f);//0.10000000000000009
console.log(o);//-2

5.一元+操作符和-操作符

var s1="01";
var s2="1.1";
var s3="z";
var b=false;
var f=1.1;
var o={
valueOf: function(){
return -1;
}
}; s1=+s1;
s2=+s2;
s3=+s3;
b=+b;
f=+f;
o=+o; console.log(s1);//1
console.log(s2);//1.1
console.log(s3);//NaN
console.log(b);//0
console.log(f);//1.1
console.log(o);//-1

一元+操作符作用类似于Number()转型函数

var s1="01";
var s2="1.1";
var s3="z";
var b=false;
var f=1.1;
var o={
valueOf: function(){
return -1;
}
}; s1=-s1;
s2=-s2;
s3=-s3;
b=-b;
f=-f;
o=-o; console.log(s1);//-1
console.log(s2);//-1.1
console.log(s3);//NaN
console.log(b);//-0
console.log(f);//-1.1
console.log(o);//1

一元键操作符应用于数值时会变成负数。应用于非数值时,和+转换规则类似。

6.两个逻辑非(!)可得到Boolean()方法一样的结果

console.log(!!"blue");//true
console.log(Boolean("blue"));//true console.log(!!0);//false
console.log(Boolean(0));//false console.log(!!NaN);//false
console.log(Boolean(NaN));//false console.log(!!"");//false
console.log(Boolean(""));//false console.log(!!12345);//true
console.log(Boolean(12345));//true

7.逻辑与(&&)、逻辑或(||)都是短路操作

&&:

短路操作。如果第一个操作数是false,则不会再对第二个操作数求值。

在有一个操作数不是布尔值的情况下,逻辑与操作不一定返回布尔值。规则如下:

  • 若第一个操作数是对象,返回第二个操作数

  • 若第二个操作数是对象,则只有在第一个操作数的求值结果为true才返回第二个操作数

  • 若两个操作数都是对象,则返回第二个操作数

  • 若有一个操作数是null,NaN,undefined,则返回null,NaN,undefined

      var found=true;
    var result=(found && someUndefinedValue);//报错,不能在逻辑与中使用未定义的值
    console.log(result);//不会执行 var found=false;
    var result=(found && someUndefinedValue);
    console.log(result);//false
||:

短路操作。如果第一个操作数是ture,则不会再对第二个操作数求值。

在有一个操作数不是布尔值的情况下,逻辑或操作不一定返回布尔值。规则如下:

  • 若第一个操作数是对象,返回第一个操作数

  • 若第一个操作数的求值结果为false,则返回第二个操作数

  • 若两个操作数都是对象,则返回第一个操作数

  • 若两个个操作数都是null,NaN,undefined,则返回null,NaN,undefined

      var found=true;
    var result=(found || someUndefinedValue);
    console.log(result);//true var found=false;
    var result=(found || someUndefinedValue);//报错
    console.log(result);//不会执行

8.除法与C不同

C是整数除法得到整数,而它是:

console.log(5/3);//1.6666666666666667

js两个整数相除是可以得到小数的。和C除完就是整数不同。

9.加法操作符和减法操作符的区别

如果两个操作数有一个是字符串:

  • 加法是将另一个操作数转换为字符串,然后再将两个操作数拼接起来。

  • 减法是将在后台调用Number()将这个字符串转换为数值,再执行减法计算。

      console.log("sum is "+1+1); //sum is 11
    console.log("sum is "+(1+1)); //sum is 2
    console.log("1"+1);//11
    console.log("1"+"1");//11 console.log(5-true);//4
    console.log(NaN-1);//NaN
    console.log("5"-3);//2
    console.log("5"-"3");//2
    console.log(5-"3");//2
    console.log(5-"");//5
    console.log("5"-"abc");//NaN

10.相等全等比较规则

关于相等:
  • 如果有一个操作数是布尔值,则在比较之前true转换为1,false转换为0;

  • 如果操作数一为字符串,一为数值,则比较前把字符串转换为数值;

  • 如果操作数一为对象,一不为对象,则调用对象的valueOf()方法,得到基本类型值再按前面的规则进行比较。

  • null和undefined相等;

  • 比较前,null和undefined不会转换成其他任何值;

  • 有一个操作数是NaN,则相等操作符返回false,不相等操作符返回true。即使两个都是NaN也是不相等;

  • 如果两个操作数都是对象,则如果它们指向同一个对象相等操作符返回true,否则返回false。

      console.log(null==undefined);//true
    console.log("NaN"==NaN);//false
    console.log(NaN==5);//flse
    console.log(NaN!=NaN);//true
    console.log(false==0);//true
    console.log(true==1);//true
    console.log(true==2);//false
    console.log(undefined==0);//false
    console.log(null==0);//false
    console.log("12"==12);//true
关于全等:
	console.log("55"===55);//false
console.log(null===undefined);//false

11.使用复合赋值操作符不会带来任何性能的提升

如num+=10与num=num+10性能一样。

12.label与循环联合使用

var num=0;

outermost:
for (var i=0;i<10;i++) {
for (var j=0;j<10;j++) {
if (i==5&&j==5) {
break outermost;
}
num++;
}
} console.log(num);//55

添加标签导致break不仅会退出内部循环,还会退出外部循环。

var num=0;

outermost:
for (var i=0;i<10;i++) {
for (var j=0;j<10;j++) {
if (i==5&&j==5) {
continue outermost;
}
num++;
}
} console.log(num);//95

continue会在i5&&j5之后退出内部循环,继续执行外部循环。

13.switch语句的不常用方法(可先略

switch ("hello world") {
case "hello "+"world":
console.log("Greeting was found.");
break;
case "goodbye":
console.log("Closing was found.");
break;
default:
console.log("Unexpected message.");
}//"Greetint was found."

switch的case值可以是字符串拼接表达式,它与switch的字符串进行比较得到结果。

var num=25;

switch (true) {
case num<0:
console.log("Less than 0.");
break;
case num>=0&&num<10:
console.log("Between 0 and 10.");
break;
default:
console.log("More than 10");
}//More than 20

给switch传递true,因为每个case都可以返回一个布尔值。这样每个case按照顺序被求值,直到找到匹配的值或遇到default。

14.函数的return

  • 函数中return之后的语句永远也不会执行
  • 一个函数可以包含多个return
  • return可以不带任何返回值。这时,函数执行后将返回undefined。

15.关于函数的arguments

(1)arguments与数组类似,但并不是Array实例。
(2)命名参数只提供便利,但不是必须的。
function doAdd() {
if (arguments.length==1) {
console.log(arguments[0]);
}
else if (arguments.length==2) {
console.log(arguments[0]+arguments[1]);
}
else{
console.log("lalala");
}
} doAdd(10);//10
doAdd(10,20);//30
(3)arguments可以和命名参数一起使用。
function doAdd(num1,num2) {
if (arguments.length==1) {
console.log(arguments[0]);
}
else if (arguments.length==2) {
console.log(arguments[0]+num2);
}
else{
console.log("lalala");
}
} doAdd(10);//10
doAdd(10,20);//30
(4)arguments值永远与对应的命名参数的值保存同步。
function doAdd(num1,num2) {
arguments[1]=10;
console.log(arguments[1]);
console.log(num2);
} doAdd(10,10);//10
//10
doAdd(5,20);//10
//10

每次执行函数都会重写第二个参数。修改了arguments[1],也就修改了num2。

但arguments[1]和num2并不是相同的内存空间,它们的内存空间时独立的,但值会同步。

(5)没有传递值的命名参数将自动被赋予undefined值。

18.JS函数没有重载

其他语言中两个函数同名,但签名(接受的参数类型和数量)不同即可成为两个函数。

JS定义了两个相同名字的函数,那该名字就只属于后定义的函数。

ECMAScript基本函数、概念区分总结的更多相关文章

  1. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分

    Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分 标签: build targetminSdkVersiont ...

  2. 【转】数据仓库ODS、DW和DM概念区分

    今天看了一些专业的解释,还是对ODS.DW和DM认识不深刻,下班后花时间分别查了查它们的概念. ODS——操作性数据 DW——数据仓库 DM——数据集市 1.数据中心整体架构   数据中心整体架构 数 ...

  3. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分 (转载)

    本文参考了谷歌开发者文档:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#provisional 如果 ...

  4. Android View, Window,Activity概念区分(2)

    (1)View:最基本的UI组件,表示屏幕上的一个矩形区域. (2)Window: 表示一个窗口,不一定有屏幕那么大,可以很大也可以很小:它包含一个View tree和窗口的layout 参数.Vie ...

  5. 神经网络6_CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程,QQ:231469242) https://study.163.com/course/introduction.htm?courseId ...

  6. 理解inode 以及 软链接和硬链接概念区分

    inode简单理解 本文来源自网络文章,并针对文章内容加以批注和修改.希望能帮到你! 一. 磁盘设备 说到inode,首先必须要提及下<操作系统>中磁盘存储器的管理一节.磁盘设备是一种相当 ...

  7. Precision/Recall、ROC/AUC、AP/MAP等概念区分

    1. Precision和Recall Precision,准确率/查准率.Recall,召回率/查全率.这两个指标分别以两个角度衡量分类系统的准确率. 例如,有一个池塘,里面共有1000条鱼,含10 ...

  8. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分

    问题引入:   有一个下载功能,在Android 5.x设备上运行正常,Android 6.x上运行异常,现象是下载进度卡在0%.   问题排查发现,是sdk的target设置为23导致,修改为21则 ...

  9. GBDT,Adaboosting概念区分 GBDT与xgboost区别

    http://blog.csdn.net/w28971023/article/details/8240756 ============================================= ...

随机推荐

  1. EasyDSS+EasyNVR实现幼儿园直播/工地直播等分权限观看直播视频的功能

    在EasyNVR互联网直播服务器使用说明书中有关于EasyNVR分组的介绍: "EasyNVR的功能定位就是为视频应用层输出视频设备接入/标准视频输出的能力平台层,只做基础的视频通道接入.视 ...

  2. json.dumps(i['bd_res'], ensure_ascii=False)

    json.dumps(i['bd_res'], ensure_ascii=False) import xlrd import time import sys import os import requ ...

  3. CSS选择器(二)

    五.属性选择器. 属性选择器可以根据元素的属性及属性值来选择元素. 简单属性选择 如果希望选择有某个属性的元素,而不论属性值是什么,可以使用简单属性选择器. 例子 1 如果您希望把包含标题(title ...

  4. swift ! 和 ? 的学习

    刚开始学 这两个符号 不确定到底是否是可以互相替代 用的都混淆了 今天好好做个总结 如果声明一个变量 如下 var  name:String?  //只声明 没做初始化赋值 说明 当前name 是 n ...

  5. 转 Hadoop傻瓜化:Datameer大数据收入翻三番

      淘薛奎发布到 <数据极客> 06-28 16:04 随着分析正在成为企业IT的核心,昔日的BI- ETL-EDW分析范型已经完全落伍,不再适用.而力推“大数据傻瓜化”的Datameer ...

  6. 第三章 python中的字符串

    一.字符串的基本操作 所有标准的序列操作对字符串同样适用,如索引.分片.乘法.判断成员是否存在.求长度.最大值和最小值等.记住一点,字符串是不可变的. 二.字符串中重要的方法 1.find(subst ...

  7. 算法(Algorithms)第4版 练习 2.2.11(1)

    实现关键代码: private static void sort(Comparable[] input, int lo, int hi) { if((lo+CUTOFF-1) >= hi) { ...

  8. Blog迁移至Jekyll

    后续的Blog都将在 http://zhwbqd.github.io/ 为您呈现

  9. Spring- 通过Xml的方式完成Bean的实例化

    传统应用程序可以通过反射方式进行实例化Bean,而Spring Ioc 容器则需要根据Bean定义的配置元数据使用反射机制来创建Bean.在Spring Ioc 容器中主要有以下几种创建Bean实例的 ...

  10. 微信等webview中无法修改document.title的情况

    // hack在微信等webview中无法修改document.title的情况 var $iframe = $('<iframe src="https://www.bbtree.co ...