JavaScript初探 (二)

JavaScript 事件

HTML事件

  • HTML事件是可以在浏览器或用户做的某些事情

  • HTML事件的例子:

    • HTML网页完成加载
    • HTML输入字段被修改
    • HTML按钮被点击

    通常,当事件发生时,用户会希望做某些事情,JavaScript则允许您在事件被侦测时执行代码。

    通过JavaScript代码,HTML允许您向HTML元素添加事件处理程序

    <element event = 'JavaScript'> ;	//使用单引号
    <element event = "JavaScript"> ; //使用双引号
    • 实例:
    <button onclick = 'document.getElementById("demo").innerHTML = Data()' >
    当前时间:
    </button>

    实例中,onclick 属性(代码)被添加到 元素中

    onclick会生成一个按钮属性,执行后续的代码,由此形成一个HTML事件。

    • 实例:
    <button onclick = "this.innerHTML = Date()">
    当前时间:
    </button>

    实例中,使用 this.innerHTML=Date() 改变自身元素的内容

    • 实例:
    <button onclik = "displayDate()">
    当前时间:
    </button>

常见的HTML事件

事件 描述
onchange HTMl元素被改变
onclick 用户点击HTML元素
onmouseover 用户鼠标接触HTML元素上
onmouseout 用户鼠标离开HTML元素
onkeydown 用户按下键盘按键
onload 浏览器完成页面加载

JavaScript可以做的事情

  • 事件处理程序可以用于处理、验证用户输入、用户动作、浏览器动作:

    • 页面加载时应该做的事情
    • 页面关闭时应该做的事情
    • 用户点击按钮时被执行的动作
    • 用书输入数据时应该验证的内容
    • ……
  • JavaScript处理事件的方法:
    • HTML事件属性可执行JavaScript代码
    • HTML时间属性能够调用JavaScript函数
    • 向HTML元素分配自己的事件处理函数
    • 阻止事件被发送或被处理
    • ……

JavaScript 字符串

特殊字符

  • 由于字符串必须有引号包围,JavaScript会误解字符串
  • 为了避免使用引号的时候被Javascript误解,可以使用转移字符
代码 结果 描述
\ ' ' 单引号
\ " " 双引号
\ \ \ 反斜杠
\ b 退格
\ f 换页
\ n 跳到新的一行
\ r 回车
\ t 水平制表符
\ v 垂直制表符

字符串可以是对象

  • 通常,JavaScript字符串是原始值,通过字面方式创建:
var firstName = "Bill" ;
  • 但是字符串也可以通过关键字 new 定义为对象:
var firstName = new String("Bill") ;
  • 实例:
var x = "Bill" ;
var y = new String ("Bill") ; typeof x ; //返回String
typeof y ; //返回object

不建议将字符串创建为对象,会拖慢执行速度,

new 关键字会使代码复杂化

当使用 == 运算时,为 true

当使用 === 运算时,为 false

var x = "Bill" ;
var y = new String ("Bill") ; x == y ; //true
x === y ; //false

字符串内建方法和属性

字符串长度

  • lenght:返回字符串的长度

字符串变量.length;

var txt = "I am is Student" ;
var len = txt.length ;
// 输出txt的长度:len=15

查找字符串中的字符

  • indexof(char):返回字符串中指定的字符首次出现的位置索引

    字符串变量.indexof(size);

var str = "I want world peach" ;
var pos = str.indexof("w");

JavaScript 从零开始计算位置。

  • lastIndexof(char) :返回字符串指定字符最后出现的位置索引
var pos = str.lastIndexo("w");

如果 indexof() 和 lastIndexof() 均为找到,会返回 -1

检查字符串中的字符串

  • search(char) :搜索特定值的字符串,并返回匹配的位置

    字符串变量.search(char);

var str = "I want world peach" ;
var pos = str.search("w")

提取部分字符串

  • 提取方法:

    slice(start , end) ;

    substring(start , end);

    substr(start , length);

slice()方法
  • slice() 提取字符串的某个开始部分并在新字符串中返回被提取的部分。
  • 该方法设置两个参数: 起始索引,终止索引(字符串从零开始索引)
  • 实例:
var str = "Refueling Huawei Refueling China";
var res = str.slice(7,13);
// 结果:Huawei
> 如果省略第二个参数,则会以第一个参数开始,到字符的最后。
var res = str.slice(17);
// 结果:Refueling China

如果参数为负数,则是从尾部开始从零计数

var res = str.slice(-5);
// 结果:China
substring()方法
  • substring() 类似 slice(),不同之处在于 substring() 无法接收负的索引
substr()方法
  • 类似与slice(),不同之处在于 substr()第二个参数规定的是被提取的长度
var str = "Refueling Huawei Refueling China";
var res = str.substr(10,6);
// 结果:Huawei

如果省略了第二参数则会截取开始位置剩下的所有字符

如果参数为负数,则从字符串的结尾开始计算位置(从零开始)

第二个参数不能为负数

替换字符串内容

  • replace():用另一个值替换字符串中指定的值。
var str = "Refueling Huawei Refueling China";
var rep = str.replace("Huawei","China");
// 结果:Refueling China Refueling China

replace方法调用不会改变字符串的原有内容,只会在替换后,返回一个新的字符串。

默认的,replace只替换首个匹配到的字符(串)。

默认的,replace对大小写敏感区分,如果要忽略大小写区分,可以使用正则:/ i

var str = "Refueling Huawei Refueling China";
var rep = str.replace("/HUAWEI/i","China");
// 结果:Refueling China Refueling China

注意:正则表达式不带引号。

var str = "Refueling Huawei Refueling China Refueling Huawei Refueling China Refueling Huawei Refueling China ";
var rep = str.replace("/Huawei/g","China");
// 结果:Refueling China Refueling China Refueling China Refueling China Refueling China Refueling China

如需替换所有匹配,使用正则的 /g 标志(用于全局搜索)——如上

大小写转换

  • toUpperCase():全部转为大写
var txt = "Huawei Refueling";
var Upptxt = txt.toUppercase();
// 结果:HUAWEI REFUELING
  • toLowerCase() :全部转为小写
var txt = "Huawei Refueling";
var Upptxt = txt.toLowercase();
// 结果:huawei refueling

concat()方法:连接字符

  • concat():连接两个或多个字符
var str = "Huawei Refueling";
var str1= "China Refueling";
var txt = str.concat(" & ",str1);
// 结果:Huawei Refueling & China Refueling

concat()方法可用于代替加运算符;如下是等效的两条:

var txt = "Huawei Refueling" + " & " + "China Refueling";
var txt = "Huawei Refueling".concat(" & ","China Refueling");
// 结果:Huawei Refueling & China Refueling
// 1,2 行代码的结果是等效的

改变的不是字符串,只是生成了一个新的字符串

String.trim()

  • trim():删除字符串两端的空白字符
var str = "    Huawei Refueling    ";
var txt = str.trim();

提取字符串字符

  • 方法:

    • charAt(position)
    • charCodeAt(position)
charAt()方法
  • charAt():返回字符串中指定下标索引的字符
var str = "Huawei Refueling";
var txt = str.charAt(7);
// 结果:R
charCodeAt()方法
  • charCodeAt():返回字符串中指定索引的字符的 unicode编码
var str = "Huawei Refueling";
var txt = str.charCodeAt(7);
// 结果:82

属性访问

var str = "Huawei Refueling";
str[0];
//结果:H
  • 问题:

    • 不适合早起版本
    • 看着像数组实际上不适数组
    • 如果找不到字符,[] 返回 undefined ,而charAt() 返回空字符串
    • [] 是只读的;str[0] = "A" ; 不会产生错误,因为,str[]不支持存入的

字符串转数组

  • split():字符串转为数组
var str = "a,b,c,d,e";
str.split(","); // 逗号分隔
str.split("|"); // 竖线分隔
str.split(" "); // 空格分隔
// 以指定的字符作为分隔条件将str字符串转为数组

如果没有分隔条件约束,字符串将包含到一个数组空间中即:str[0]=a,b,c,d,e

如果分隔符是"",返回的是间隔单个字符的数组

var str = "Huawei";
str.split("") ;

JavaScript 数字

JavaScript 数值

书写JavaScript数值,既可以带小数点,也可以不带。

  • 超小或超大的数可以通过科学计数法来写:
var x = 123e5 ; // 12300000
var y = 123e-5 ; // 0.00123

JavaScript 数值始终是 64 位的浮点数

数值精度

  • 小数最大是精确到—17位(浮点数的算法是不100%精确的)

数字和字符串相加

警告!!!

  • JavaScript的加法和级联都使用 + 运算符;
  • 数字用加法+ ,字符串用 级联;

数字字符串

  • JavaScript 字符串可以拥有数字内容
var x = 100 ;	// x是数字
var y = "100" ; // y是字符串

在数字运算中,JavaScript会尝试将字符串转为数字进行运算

var x = "100" ;
var y = "10" ;
var z = x / y ; //结果:z = 10

javaScript会对乘法、除法、减法等除了加法以外的字符串数字进行算数运算

但是,不会对 加法 进行算数运算;

会对加法进行字符串的级联

NaN - 非数值

  • NaN:属于JavaScript保留字,表示某个数不是合法的数。
var x = 100 / "Huawei" ;
// 结果:x = NaN

表示x现在是不合法的

  • isNaN :全局函数,用于判断某个值是不是 数值
var x = 100 / "Huawei";
isNaN(x);//返回 true

NaN 在typeof会认定为 number ===> 认为是一个数

Infinity

  • Infinity :JavaScript在计算数值时超出最大可能数范围时返回的值
var myNumber = 2 ;
while(myNumber != Infinity){
myNumber = myNumber * myNumber ;
}

除以 零 也会生成 Infinity

var x = 2 / 0 ;		//x ==> Infinity
var y = -2 / 0 ; //y ==> -Infinity
  • Infinity是数;typeof Infinity 返回 number

十六进制

  • 前缀为 0x 的数值常量会被解释为 十六进制
var x = 0xFF ;
// 结果: 255

一些版本也会把 0 带头的数解释为八进制

toString()方法
  • toString(x):按照x设定的进制数,输出数。
var myNumber = 128 ;
myNumber.toString(16) ; // 十六进制输出 80
myNumber.toString(8) ; // 八进制输出 200
myNumber.toString(2) ; // 二进制输出 1000 0000

数值可以是对象

通常JavaScript 数值是通过字面量创建的原始值:var x = 123 ;

也可以通过关键字 new 定义为对象: var y = new Number(123);

var x = 123 ;
var y = new Number(123) ;
// typeof x 返回 number
// typeof y 返回 object

不建议使用new定义对象,因为 JavaScript对象无法逻辑对比


JavaScript 数值方法

Number方法和属性

toSring()方法*

  • toString():以字符串返回数值

所有数字方法可用于任何类型的数字(字面量、变量或表达式)

  • toString(x):以x进制返回数值
var myNumber = 128 ;
myNumber.toString(16) ; // 十六进制输出 80
myNumber.toString(8) ; // 八进制输出 200
myNumber.toString(2) ; // 二进制输出 1000 0000
myNumber.toString() ; // 默认进制输出 128
myNumber.toString(10) ; // 十进制输出 128

toExponential()方法

  • toExponential(x):返回字符串值,包含四舍五入并指数计数的数字
var x = 3.145 ;
x.toExponential(2) ; // 返回 3.15e+0
x.toExponential(4) ; // 返回 3.1450e+0
x.toExponential(6) ; // 返回 3.145000e+0

x参数是可选的,没有设置就不会对数值进行四舍五入;如果设置了,就会按照x位小数进行四舍五入并以指数的方法进行输出字符串值类型。

toFixed()方法

  • toFixed(x):返回字符串值,指定小数位数并进行四舍五入(不以指数计数)
var x = 3.145 ;
x.toFixed(0); // 返回 3
x.toFixed(2); // 返回 3.15
x.toFixed(4); // 返回 3.1450

toPrecision()方法

  • toPrecision(x):返回字符串值,包含指定长度的数字(总长度)
var x = 3.145 ;
x.toPrecision() ; // 返回 3.145
x.toPrecision(2); // 返回 3.1
x.toPrecision(4); // 返回 3.145
x.toPrecision(6); // 返回 3.14500

valueOf()方法*

  • valueOf():以数值返回数值

变量转为数值

  • 三种方法将变量转为数字:

    • Number()方法
    • parseInt()方法
    • parseFloat()方法

    这些方法是全局的JavaScript方法

全局方法

  • JavaScript的全局方法使用于所有JavaScript数据类型
方法 描述
Number() 返回数值,由其参数转换而来
parseFloat() 解析其参数并返回浮点数
parseInt() 解析其参数并返回整数

Number()方法

  • Number():把JavaScript变量转换为数值
x = true ;
Number(x) ; // 返回 1
x = false ;
Number(x) ; // 返回 0
x = new Data() ;
Number(x) ; // 返回 14045680277739
x = "10" ;
Number(x) ; // 返回 10
x = "10 20" ;
Number(x) ; // 返回 NaN

如果变量无法转为数字,则返回 NaN(非数值)

用于日期的Number()方法
  • Number也可以把标准格式的日期转换为数字
Number(new Date("2019-06-18")) ;
// 返回:1560816000000

parsInt()方法

  • paresInt():解析一段字符串并返回数值;允许空格;只返回首个数字
paresInt("10") ; // 返回 10
paresInt("10.33"); // 返回 10
paresInt("10 20 30"); // 返回 10
paresInt("Huawei 10"); // 返回 NaN

如果无法转换为数值,则返回 NaN

parseFloat()方法

  • parseFloat():解析一段字符串并返回数值;允许空格;只返回首个数字
paresFloat("10"); // 返回 10
paresFloat("10.33"); // 返回 10.33
paresFloat("10.11 2.2 22"); // 返回 10.11
paresFloat("Huawei 10.11"); // 返回 NaN

如果无法转换为数值,则返回 NaN

数值属性

属性 描述
MAX_VALUE 返回JavaScript中可能的最大的数
MIN_VALUE 返回JavaScript中可能的最小的数
NEGATIVE_INFINITY 表示负的无穷大
NaN 表示非数字值
POSITIVE_INFINITY 表示无穷大(溢出返回)
数字属性不可用于变量
  • 数字属性属于名为Number的JavaScript数字对象包装

    这些属性只能作为Number.MAX_VALUE访问

    使用 myNumber.MAX_VALUE,其中myNumber是变量、表达式或值,将返回undefined


JavaScript初探 二 (了解数据)的更多相关文章

  1. JavaScript初探二

    //----------总结01.查找dom元素 document.getElementById();//通过id获取一个dom元素 document.getElementsByClassName() ...

  2. 初探JavaScript(二)——JS如何动态操控HTML

    除去五一三天,我已经和<JavaScript Dom编程艺术>磨合了六天,第一印象很好.慢慢的,我发现这是一块排骨,除了肉还有骨头.遇到不解的地方就会多看几遍,实在不懂的先跳过,毕竟,初次 ...

  3. JavaScript初探 一(认识JavaScript)

    JavaScript 初探 JavaScript插入HTML中 内嵌的Js代码 <!DOCTYPE html> <html> <head> <meta cha ...

  4. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  5. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  6. 从头开始学JavaScript (十二)——Array类型

    原文:从头开始学JavaScript (十二)--Array类型 一.数组的创建 注:ECMAscript数组的每一项都可以保存任何类型的数据 1.1Array构造函数 var colors = ne ...

  7. 《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换

    目录 02:数据类型转换 && 隐式转换 || 显式转换 02:数据类型转换 && 隐式转换 || 显式转换 在上一个章节中,我们介绍了 JavaScript 的基本的 ...

  8. 2、JavaScript 基础二 (从零学习JavaScript)

     11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...

  9. javascript实现二叉搜索树

    在使用javascript实现基本的数据结构中,练习了好几周,对基本的数据结构如 栈.队列.链表.集合.哈希表.树.图等内容进行了总结并且写了笔记和代码. 在 github中可以看到  点击查看,可以 ...

随机推荐

  1. 如何解决eclipse远程服务器上面的Rabbitmq连接超时问题?

    1.嗯,问题呢,就是一开始安装好RabbitMQ,练习了一下RabbitMQ的使用,但是呢,过了一段时间,我来复习的时候,发现运行出现下面的错误了.后来想想,是自己学习微服务的时候,修改了/etc/h ...

  2. jvm虚拟机笔记<一> 内存区域

    运行时数据区域: 程序计数器:字节码的行号指示器. 虚拟机栈:为每个方法创建一个栈帧(存放方法中的局部变量,变量引用等). 本地方法栈:存放本地方法. ------------------------ ...

  3. 【C#】学习笔记 Linq相关

    Language-Integrated Query(语言集成查询) 写了个demo,具体看

  4. MySQL数据库:数据的概念

    基本定义 数据:是数据库总存储的基本对象 定义:描述客观事物的符号记录 种类:数字.文字.图形.图像.声音等 数据库:DB 存储数据的集合 数据库管理系统:DBMS 用户和操作系统之间的一层数据管理软 ...

  5. Ubuntu18.04初始化

    Ubuntu18.04初始化 更新源: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo gedit /etc/apt/sour ...

  6. Bert镜像制作及flask生产环境模式启动

    一天搞定两大技术点,成就满满. 一,dockerfile FROM harbor.xxx.com.cn/3rd_part/tensorflow:1.14.0-gpu-py3-jupyter LABEL ...

  7. The 2019 Asia Nanchang First Round Online Programming Contest

    传送门 A. Enju With math problem 题意: 给出\(a_1,\cdots,a_{100}\),满足\(a_i\leq 1.5*10^8\). 现在问是否存在一个\(pos\), ...

  8. 5.jenkins 构建任务2--PHP项目

    推送代码 PHP 项目 然后我们要做的就是将 .jenkins下面 workspace下的代码. 推送到我们的项目机器上面 就ok了. 我们可以在php的jenkins的 项目配置中选择使用shell ...

  9. 201871010105-曹玉中《面向对象程序设计(Java)》第一周学习总结

    201871010105-曹玉中<面向对象程序设计(Java)>第一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...

  10. [WPF]实现TextBox文本框单击全选

    原文:[WPF]实现TextBox文本框单击全选 /// <summary>         /// Void:设置获取焦点时全选文本         /// </summary&g ...