JavaScript进阶入门(二)

转换为数字

使用parseInt()

parseInt函数会先查看位置0处的字符,如果该位置不是有效数字,则将返回NaN,如果0处的字符是数字,则将查看位置1处的字符,并进行同样的测试,以此类推在整个验证过程中,直到发现非数字字符为止,此时paresInt()函数将前面分析合法的数字字符转化为数值,并返回。

alert(parseInt("123abc"));//返回数字123
alert(parseInt("1.73"));//返回数字1
alert(parseInt(".123"));//返回值NaN

浮点数中的点号对于parseInt()函数来说属于非法字符,因此不会装换它,并返回。

使用parseFloat函数

parseFloat函数与parseInt函数用法基本相同,但是它能够识别第一个出现的小数点号,而第二个小数点号则被视为非法的。

alert(parseFloat("1.234.11"));//返回数值1.234

使用乘号运算符

加号运算符不仅能够执行数值求和运算,还可以吧字符串连接来。由于JavaScript处理字符串连接操作的优先级要高于数字求和运算。因此,当数字字符串与数值使用加号连接时,将优先执行连接操作,而不是求和运算。

由此可以看出,使用*号可以利用JavaScript的自动转换完成这个目标。

var a=1;
var b="1";
alert(a+(b*1));

转换为布尔值

任何值如果在前面加上一个逻辑非运算符,JavaScript都会把这个表达式看作是逻辑运算,执行运算时,先把值转换为布尔值,然后再执行逻辑非运算。

var a=!0;//true
var b=!1;//false
var c=!NaN;//true
var d=!null;//true
var e=!undefined;//true
var f=![];//false
var g=!{};//false

使用Boolean()构造函数转换

var a=0;
var b=1;
a=new Boolean(a);//false
b=new Boolean(b);//true

把对象转化为值

对象在逻辑运算环境中的转换

对象在逻辑运算环境中,则对象被转换为true。这包括所有类型的对象,即使是值为false的包装对象也为true、

var a=new Boolean(false);
var b=new Number(0);
var c=new String("");
a && alert(a);//a转换为布尔值true,但是她提示的字符串转换至为false
b && alert(b);//b转换为布尔值true,但是她提示的字符串转换至为"0"
c && alert(c);//c转换为布尔值true,但是她提示的字符串转换至为""

数组在数值运算环境中的转换

当数组被用在数值运算环境中是,数组将根据包含的元素来决定转换的值。

1)如果是空数组,则被转为数值0.当数组为空的时候,JavaScript将调用toString()方法把数组换位空字符串,然后经空字符串强制转换为0.

2)如果数组仅包含一个数字元素,则被转换为该数字的数值。

var a=[5];
a=a*1;//投放到数值运算环境中
alert(a);//返回数值5
alert(typeof a);//返回数值类型numbmer

3)如果数组包含多个元素,或仅包含一个非数字元素,则返回NaN

对象在模糊环境

1)当对象与数值进行加号运算是,则会尝试把对象转化为数值,然后参与求和运算,如果不能够转化为有效数值,则执行字符串连接操作。

var a=new String("a");
var b=new Boolean(true);
a=a+0;
b=b+0;
alert(a);//返回字符串"a0"
alert(b);//返回数值1

2)当对象与字符串进行加号运算时,则直接转化为字符串,进行连接操作

3)当对象与数值进行比较运算时,则会尝试吧对象转换为数值。

运算符

优先级

优先级:表示运算符参与的先后顺序,顺序越大,运算优先级就越高。

15

.(点号)

[]中括号

()小括号

new

14

++(连加)

--(连减)

+(加号)从右到左

*(乘法运算)


NaN

NAN和其他的任何值相加都是NaN

减法运算中如果有一个运算数不是数字则返回NaN,如果数字为字符串,则会把它转换为数值之后在进行运算。

逻辑运算符

逻辑与运算符&&的逻辑解析:

首先,计算第一个运算数,即左侧表达式,如果左侧的表达式的计算值可以被转换为false,那么就会结束计算,直接返回第一个运算数的值。

由于这种特性,在程序中也会利用它设计简易运算

(n==1) && alert(1);

逻辑或运算符||的逻辑解析:

计算第1个运算数。如果左侧的表达式的计算值可以被转换为true,那么就直接返回第一个运算数的值,忽略第2个运算数(既不执行)。

&&的优先级高于||

逻辑非运算符!是一元运算符,直接放在运算数之前,将对运算数执行布尔取反操作,并返回布尔值

等值检测

==(相等) 比较两个运算数的返回值,看是否相等

!=(不相等) 比较两个运算数的返回值,看是否不相等

===(全等) 比较两个运算数的返回值,看是否相等,同时检测他们的数据类型是否相等

!==(不全等) 比较两个运算数的返回值,看是否不相等,同时检测它们的数据类型是否不相等。

相等运算的比较规则

如果运算数是布尔值,在比较之前转化为数值。

如果一个运算数是字符串,另一个运算数是数字,在比较之前先尝试把字符串转化为数字。

如果一个运算数是数字,另一个运算数是对象,在比较前先将对象转化为数字。

如果一个运算数是字符串,另一个运算数的对象,在比较之前先尝试把对象转换为字符串。

如果两个运算数都是对象,那么比较他们的引用值。

对象操作运算符

new 运算符可以根据构造函数创建一个新的对象,并初始化这个对象

new constructor(arguments)

constructor必须是一个构造函数表达式,其后面应该是利用小括号包含的参数列表,参数可有可无,参数之间通过逗号进行分割。

var a=new Array();
var a=new Array(1,2,3);

new运算符被执行的时候,首先会创建一个新对象接着new运算符调用指定的构造函数,这里是Array数组的构造函数。

以下代码可以自定义类,并使用它创建新的对象

var a=function(){
this.x=1;
this.y=2;
};
var b=new a; //创建自定义类a的对象实例
alert(b.x); //返回1,调用对象的成员

对于自定义类,只能通过new运算来进行实例化

(这个没必要太懂,就是知道JavaScript的类实际上是一个函数,调用这个函数,就自动造成了对象。之后会讲)

delete运算符

delete运算符能够删除指定对象的属性,数组元素或变量

var a={
x:1;
y:2;
};
alert(a.x);//返回1,调用对象成员
delete a.x;//删除对象成员x
alert(a.x);//返回undefined,没有找到该对象成员

不是所有的对象成员或变量都可以被删除,某些内置对象的预定义和客户端对象成员,以及使用var语句生命的变量都是不允许删除的。

如果删除不存在的对象成员,或者非对象成员,数组元素,变量时,他会返回true,所以使用delete运算时,应该注意这个问题,防止和成功删除发生混淆。

var a={
x:1;
y:2;
};
alert(delete a); //返回false,说明不允许删除
alert(delete a.z)//返回true,说明不存在该属性
alert(delete Object)//返回true,说明删除的不是成员,元素或变量
alert(delete b)//返回true,说明不存在该变量。

中括号和点括号运算符

中括号和点号都属于存取运算符,用于访问对象后数组。使用中括号运算符([])可以存取数组元素值。

例子:

var a={
x:1;
y:function(){
return 2;
}
};
alert(a["x"]);//返回1,读取属性x的值。

点号运算符(.)可以存取对象的属性值,它比中括号灵活方便,因为点号运算符右侧可以直接指定属性的标识符,而不是属性名称的字符串或变量。

对于中括号预算福可以通过变量或字符串表达式来传递特定值

var b="x";
var a={
x:1;
};
alert(a[b]);
alert(a.b);

在中括号中的字符串形状的数字会被转化成数字来进行运算。

var a=["x",true,{}];
alert(a[1]);
alert(a["1"]);

小括号运算符

小括号是一个特殊的运算符,他没有固定数目的运算数。其中第一个运算数必须是一个函数名或者引用函数的表达式。

f(a,b,c);

function a(){
alert("Hello world");
}
a;
a();
a(1,"string",{},true);

小括号运算符在执行的时候是这样的,先对没个运算数进行计算,然后调用第一个运算数所指的函数,同时把余下的运算数传递给函数作为它的参数。

其他运算符

条件运算符

条件运算符是JavaScript唯一的三元运算符,语法形式如下:

a?x:y

a运算数必须是一个布尔值的表达式,即返回值必须是一个布尔值,一般使用比较表达式来表示。x和y是任意类型的值。如果运算数a返回值为true时,将执行x运算,并返回该表达式的值。如果运算数a返回值false时,将执行y运算数,并返回该表达式的值。

逗号运算符

逗号运算符是一个二元运算符,他能够执行运算符左侧的运算数,然后在执行右侧的运算数,最后仅把右侧运算数的值作为结果返回。

可以用来连续声明多个变量并赋值

var a=1,b=2,c=3,d=4;
//等于
var a=1;
var b=2;
var c=3;
var d=4;

JavaScript入门进阶(二)的更多相关文章

  1. javascript入门进阶(一)

    javascript 入门进阶 这里主要讲解一下在入门阶段很难注意的一些知识点,不一定有用.但是会了总比不会强. 1.HTML为<script>标签准备的6个属性: -async:可选.表 ...

  2. JavaScript 入门教程二 在HTML中使用 JavaScript

    一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script t ...

  3. JavaScript入门介绍(二)

    JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...

  4. 2016.8.25 JavaScript入门之二

    1.字符串中,引用字符串:要用/"转换: 例如:var myStr="I am a \"double quoted\" string inside \" ...

  5. JavaScript入门(二)

    一.JS中的运算符 1.算术运算(单目运算符) + 加.-减.*乘. /除. %取余.++自增运算符 .--自减运算符; >>>+:有两种作用,链接字符串/加法运算符.当+两边全为数 ...

  6. JavaScript入门-函数function(二)

    JavaScript入门-函数function(二) 递归函数 什么是递归函数? 递归简单理解就是,在函数体里,调用自己. //我们在求一个10的阶乘的时候,可能会这么做 //写一个循环 var to ...

  7. JavaScript入门(二)

    JavaScript入门—操作DOM树 要点 DOM树是一个树形结构,操作DOM树通常是“更新.遍历.新增.删除”. 更新DOM树 拿到DOM节点 var id=document.getElement ...

  8. JavaScript入门篇 编程练习

    编程挑战 一.定义"改变颜色"的函数 提示: obj.style.color obj.style.backgroundColor 二.定义"改变宽高"的函数 提 ...

  9. 慕课网JavaScript入门篇课程笔记

    1.js注释很重要 单行注释,在注释内容前加符号 “//”. <script type="text/javascript"> document.write(" ...

随机推荐

  1. VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能调用的API封装库

    API函数很强大,但是声明的时候比较繁琐. 我开发的封装库,包括窗口.键盘.鼠标.消息等常用功能.用户不需要添加API函数的声明,就可以用到API的功能. 在VBA.VB6的引用对话框中引用API.t ...

  2. 2.Redis数据类型

    Redis中存储数据是通过key-value存储的,对于value的类型有以下几种: 字符串 Hash类型 List Set SortedSet(zset) 注:在redis中的命令语句中,命令是忽略 ...

  3. [LC] 250. Count Univalue Subtrees

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  4. 吴裕雄--天生自然python学习笔记:python处理word文档

    Office 文件是我们日常工作生活中都经常用到的文件格 式,其中以 Word 格式的文件最为常用 . Python 可通过 Win32com 纽件对 Micro so位 Office 文件 进行存取 ...

  5. F. Moving On

    http://codeforces.com/gym/102222/problem/F fory #include<bits/stdc++.h> using namespace std; t ...

  6. 用Microsoft Chart Controls(MSChart)实现曲线图,并支持拖动放大到秒

    Microsoft Chart Controls(简称MSChart)控件,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式. MSChart 在.NET 4.0自 ...

  7. [LC] 240. Search a 2D Matrix II

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  8. [LC] 295. Find Median from Data Stream

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  9. OpenCV Laplace 算子

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...

  10. 洛谷-P3809-后缀排序(后缀数组)

    看了求后缀数组的倍增法之后很快就理解了,但是自己写的倍增法用map排序还是超时了.然后看了两天别人写的模板,题目是通过了,但感觉代码还是半懂半背的.以后多熟悉熟悉吧: 后缀数组 #include &q ...