第六章 类型 相等 转换等

一、类型

1 typeof();

typeof是一个内置的JavaScript运算符,可用于探测其操作数的类型。

例:

 <script language="JavaScript" type="text/JavaScript">

 var test1="abcdef";                                        //string

 var test2=123;                                                //number

 var test3=true;                                                //boolean

 var test4={};                                                //object

 var test5=[];                                                //object

 var test6;                                                //undefined

 var test7={"asdf":123};                                //object

 var test8=["asdf",123];                                //object

 function test9(){return "asdfg"};        //function

 console.log(typeof test1);//string

 console.log(typeof test2);//number

 console.log(typeof test3);//boolean

 console.log(typeof test4);//object

 console.log(typeof test5);//object

 console.log(typeof test6);//undefined

 console.log(typeof test7);//object

 console.log(typeof test8);//object

 console.log(typeof test9);//function

 </script>

2 undefined

说明:对于任何还没有值(即未初始化)的东西,都会将undefined赋给它;undefined的类型是undefined

【未初始化的变量、访问不存在或已删除的属性、使用不存在的数组元素】

优点:undefined让你能够判断是否给变量(属性、数组元素)赋值了

应用:

 //变量

 var x;

 if(x==undefined)

 {

 处理程序;

 }

 //对象的属性

 var customer={

 name:"Jenny"

 };

 if(customer.phonenumber==nudefined)

 {

 处理程序

 }

3 null

说明:表示没有对象可以赋给变量;

与undefined对比:undefined:在变量未初始化、对象没有指定属性、数组没有指定元素;

null:在应该提供一个对象,但无法创建或找到时;

再次说明:返回null未必意味着出现了问题,这可能只是意味着有什么东西不存在,需要创建它或可以忽略它。

例:

 var weather=document.getElementById("weatherDiv");

 if(weather!=null)

 {

 //为div元素weather创建内容

 }

4 NaN

说明:不是数字的数字【它的类型为number】,表示
0/0 等不可以被表示的数字,

*是一个数字,只是无法表示;

*NaN!=NaN 【sqrt(-1)与sqrt(-2)】;

*判断函数是isNaN();返回值为布尔类型;

*向isNaN()传递一个不能转换为数字的字符串时返回true;

*typeof null返回值为object【与说明相对应】

*NaN与Infinity区别:Infinity是指任何超过浮点数上限1.7976931348623157E+1.038的值,

(-Infinity是小-1.7976931348623157E+1.038)

二、 相等

1 理解相等

如果两个值类型相同,就直接进行比较;

如果两个值类型不同,就尝试将他们转换为相同的类型再进行比较;

返回值:相等true不等false

2 相等运算符转换操作数:

*比较数字和字符串,将字符串转换为数字,(如将“99”转换为 99 );如果不能转换为数字则转换为NaN

*比较布尔类型和其他类型,将布尔中true=1,false=0;

*undefined==null;

*""空字符串转换为数字0;

拓:严格相等:===【类型和值都相等】

没有<==和>==但是有!===

应用:"true"==true;//返回false因为签前面为字符串后边布尔转换为数字

"banana"<"melon";//返回true,因为按照字母排列顺序Unicode排序,开头b<m,拓M<m

三、类型转换

1 涉及转换的运算符

·       
+  数字遇到字符串,将数字转换为字符串;如1+2+"pizzas"="3
pizzas";1+(2+"pizzas")="12 pizzas";true转换为字符串

·       
*数字遇到字符串,将字符串转换为数字

·       
/数字遇到字符串,将字符串转换为数字

·       
- 数字遇到字符串,将字符串转换为数字

四、 判断两个对象是否相等

·       
运算符:==和===等价

·       
意义:检查两个对象变量是否相等时,比较的是指向对象的引用,仅当两个引用指向的是同一个对象时,他们才相等;

·       
例:

 <!doctype html>

 <html lang="en">

 <head>

 <title>look for car</title>

 <meta charset="utf-8">

 <style type="text/css">

 </style>

 <script language="JavaScript" type="text/JavaScript">

 function findCarInLot(car)

 {

 for(var i=0;i<lot.length;i++)

 {

 if(car===lot[i])//== 一样

 return i+1;

 }

 return -1;

 }

 var chevy={

 make:"Chevy",

 model:"Bel Air"

 };

 var taxi={

 make:"Webville Motors",

 model:"Taxi"

 };

 var fiat1={

 make:"Fiat",

 model:"500"

 };

 var fiat2={

 make:"Fiat",

 model:"500"

 };

 var lot=[chevy,taxi,fiat1,fiat2];

 var loc1=findCarInLot(taxi); //

 var loc2=findCarInLot(fiat1);//

 var loc3=findCarInLot(chevy);//

 var loc4=findCarInLot(fiat2);//

 console.log(loc1);//

 console.log(loc2);//

 console.log(loc3);//

 console.log(loc4);//

 </script>

 </head>

 <body>

 <h1>Look for cars in the parking lot</h1>

 </body>

 </html>

五 、真值和假值

·       
说明:在JavaScript中有些值并非true和false但是用于条件表达式中时被视为true和false。

·       
记住五个假值,其余就是真值:undefined null 0 空字符串 NaN

例如:if([]){//代码;}中[] 表示数组为真值

六 、字符串

·       
前奏:每种类型都归属两个阵营之一,基本类型和对象;

·       
字符串/数字/布尔也可以是既有基本类型又是对象,但是后两者的属性和方法较前一者少很多;

·       
string属性和方法介绍:

·       
属性str.length:返回字符串的长度即字符个数;

·       
方法str.charAt():参数范围是0-长度-1 的整数,返回为该索引的字符;

·       
方法str.indexOf("cat");返回第一个cat中c的索引;

str.indexOf("the",5);从索引为5开始搜索,返回the中t的索引;

如果没有找到返回-1;

·       
方法str.substring(5,10);返回索引5(包括)到10(不包括)之间的字符串;

substring(5);返回从索引5到字符串结尾的字符串;

·       
方法str.slice(5,7);删除字符串的一部分并返回结果;和substring返回结果相同

·       
方法str.split("|");返回以|为界分隔的字符串数组;

·       
方法str.toLowerCase();返回将字符串的所有大写转换成小写;

·       
方法str.toUpperCase();返回将字符串中的所有小写转换成大写;

·       
方法str.concat(str2);返回将str2拼接在str后的字符串;参数可以是多个即继续向后拼接;

·       
方法str.replace("fgh","12");查找子串fgh并替换成另外一个字符串12;

·       
方法str.lastIndexOf();与indexOf类似但是查找最后一个子串;

str="asd,fgh,jkfg 
";str3=str.lastIndexOf("fg",4);//返回4

str="asd,fgh,jkfg 
";str3=str.lastIndexOf("fg");//返回10

·       
方法match:在字符串中查找与正则表达式匹配的子串

 <script type="text/javascript">

 var str="Hello world!"
document.write(str.match("world") + "<br />")
document.write(str.match("World") + "<br />")
document.write(str.match("worlld") + "<br />")
document.write(str.match("world!")) </script>

输出:

world
null
null
world!

·       
方法str.trim():删除字符串开头和末尾的空白字符;

七、举个栗子:

 <!doctype html>

 <html lang="en">

 <head>

 <title>Check phone number</title>

 <meta charset="utf-8">

 <style type="text/css">

 </style>

 <script language="JavaScript" type="text/JavaScript">

 //要求检验7位数字的电话号,中间第四位-可有可无

 //方法一:

 function validate1(phonenumber)

 {

 if(phonenumber.length>8||phonenumber.length<7)

 return false;

 for(var i=0;i<phonenumber.length;i++)

 {

 if(i==3)

 {

 if(phonenumber.length===8&&phonenumber.charAt(i)!=='-')

 return false;

 else if(phonenumber.length==7&&isNaN(phonenumber.charAt(i)))

 return false;

 }

 else if(isNaN(phonenumber.charAt(i)))

 return false;

 }

 return true;

 }

 //方法二:还有bug吗?

 function validate2(phonenumber)

 {

 if(phonenumber.length>8||phonenumber.length<7)

 return false;

 var first=phonenumber.substring(0,3);

 var second=phonenumber.substring(phonenumber.length-4);

 if(isNaN(first)||isNaN(second))

 return false;

 if(phonenumber.length===8)

 return (phonenumber.charAt(3)=='-');

 return true;

 }

 //方法三:正则表达式

 function validate3(phonenumber)

 {

 return phonenumber.match(/^\d{3}-?\d{4}$/);

 }

 var str1="6724025";

 var str2="672-4254";

 var str3="72554896"

 console.log(validate1(str1));

 console.log(validate2(str2));

 console.log(validate3(str3));

 </script>

 </head>

 <body>

 <h1>Verify that the phone number is correct</h1>

 </body>

 </html>

JavaScript学习笔记(五)——类型、转换、相等、字符串的更多相关文章

  1. JavaScript学习笔记——数据类型强制转换和隐式转换

    javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...

  2. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  3. JavaScript:学习笔记(2)——基本概念与数据类型

    JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...

  4. JavaScript学习笔记[0]

    JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...

  5. Javascript学习笔记——操作浏览器对象

    Javascript学习笔记 目前尝试利用javascript去对于一个浏览器对象完成一系列的访问及修改, 浏览器是网页显示.运行的平台,常用的浏览器有IE.火狐(Firefox).谷歌(Chrome ...

  6. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  8. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)——VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  9. Javascript学习笔记-一些关键点

    Javascript学习笔记-一些关键点 Table of Contents 1. 调试 2. == vs === 3. 两种函数声明 4. 技术感悟 1 调试 现在的主流浏览器都提供了开发者模式,可 ...

  10. C++基础 学习笔记五:重载之运算符重载

    C++基础 学习笔记五:重载之运算符重载 什么是运算符重载 用同一个运算符完成不同的功能即同一个运算符可以有不同的功能的方法叫做运算符重载.运算符重载是静态多态性的体现. 运算符重载的规则 重载公式 ...

随机推荐

  1. 【CSS-移动端响应式布局详解】

    背景 移动端响应式布局开发主要方案有: 基于rem开发 基于媒体查询 基于弹性盒 基础概念 在讨论响应式布局知识前,先了解下移动端常用基础概念. 逻辑像素(CSS pixels) 浏览器使用的抽象单位 ...

  2. 清理 Xcode 10 记录

    1,清理 ~/Library/Developer/CoreSimulator/Devices 说明:该目录存放当前的所有模拟器,每个标识符代表一台机器,清理掉避免存在旧版本的模拟器缓存 执行: 关闭模 ...

  3. 纯 js 实现上传文件支持拖拽

    开发「bufpay.com 个人即时到账收款平台」 后台需要支持开发者的微信和支付宝二维码上传. <p> <button class="btn btn-primary&qu ...

  4. code#5 P2 棋子

    棋子   时间限制: 1.0 秒 空间限制: 512 MB 相关文件: 题目目录 题目描述 棋盘从左到右被分割成 n(n≤1000) 个格子,从左到右编号为1,2,...,n.棋盘上有 m(m≤n)  ...

  5. Delphi XE7的蓝牙 Bluetooth

    Delphi XE7已经内建了蓝牙功能,提供了System.Bluetooth.pas单元 顾名思义,System表示XE7的蓝牙功能可以在Windows,Android,IOS系统内使用 Syste ...

  6. Linux命令—tar

    day 7:tar压缩.解压缩.打包.解包命令 区分打包和压缩:打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 为什么要区分这两个概念呢?这源于Li ...

  7. ACM1019:Least Common Multiple

    Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...

  8. 希尔伯特曲线——第八届蓝桥杯C语言B组(国赛)第三题

    原创 标题:希尔伯特曲线 希尔伯特曲线是以下一系列分形曲线 Hn 的极限.我们可以把 Hn 看作一条覆盖 2^n × 2^n 方格矩阵的曲线,曲线上一共有 2^n × 2^n 个顶点(包括左下角起点和 ...

  9. 002---Redis

    主从复制 主节点负责写数据.从节点负责读数据.主节点定期将数据同步到从节点,从而保证数据的一致性. 一主一从 一主多从 针对"读"较多的场景,"读"由多个从节点 ...

  10. leetcode记录-字符串转整数

    实现 atoi,将字符串转为整数. 该函数首先根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字 ...