主要内容:

  1、创建对象的几种方式

  2、JavaScript内置对象

  3、JavaScript错误--Throw、Try 和 Catch

  4、JavaScript 表单验证

一、创建对象的几种方式

  1、使用Object或者对象字面变量创建对象

   (1)使用Object创建对象

    例如: 

var student = new Object();
student.name = "cc";
student.age = 20;
这样,一个student对象就创建完毕,拥有2个属性name以及age,分别赋值为“cc ”和20。

  (2)使用对象字面量创建对象

    例如:

var student = {
name:"cc";
age:20
};  
   但这样有一个问题就冒出来了,如果我们有成百上千个同样的类,student1、student2等等,
  我们就不得不重复修改成百上千次。。。不禁泪流满面。。。
那么能不能向工厂车间一样,有一个车床就不断生产处对象呢?所以我们有利器--“工厂模式”!

  2、工厂模式创建对象

    注意:JavaScript没有类的概念,我们可以使用一种函数将以上对象创建过程封装起来

  便于重复调用,同时给出特定接口来初始化对象。

         例如:

function createStudent(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
return obj;
} var stu1 = createStudent("cc1",20);
var stu2 = createStudent("cc2",21);
var stu3 = createStudent("cc3",22);   
    如此一来,我们就可以通过createStudent函数源源不断地“生产”对象了。看起来,已经非常
  完美了,但贪婪的人类总是不满足的,我们不仅希望“产品”的生产可以像工厂车间一般源源不断,
  我们还想知道生产的产品是哪一种类型的。
  
  比如:我们又定义了生产水果对象的createFruit()函数
    
function createFruit(name,color){
var obj = new.object();
obj.name = name;
obj.color = color;
return obj;
} var stu = createStudent("jack",24);
var fruit = createFruit("apple",red);

  注意: 

  对于对象stu,fruit,我们用instanceof操作符去检测,他们统统都是Object类型。
而我们希望知道s1是Student类型的,f1是Fruit类型的、为此,我们还得继续寻找,
用自定义构造函数的方法来创建对象。

  3、构造函数模式创建对象(推荐)  

  在上面创建Object这样的原生对象时,我们就已经使用过构造函数了:
   var obj = new Object();
  在创建原生数组Array类型对象时,也是用过其构造函数:
  var arr = new Array(10); // 构造一个初始长度为10的数组对象
  (1)注意:
    
 1、实际上并不存在创建构造函数的特殊语法,其与普通函数唯一的区别在于调用方法。对于任意函数,
使用new操作符调用,那么它就是构造函数;不使用new操作符调用,那么它就是普通函数。
2、按照惯例,我们约定构造函数名以大写字母开头,普通函数以小写字母开头,这样有利于显性区分二者。
例如上面的new Array(),new Object()。

  (2)使用new操作符调用构造函数时,会经历4个阶段:

阶段1:创建一个新对象,如:
       var a = new Object(name,age);
阶段2:将构造函数作用域赋给新对象(使this指向新对象),如:
this.name =name;
阶段3:执行构造函数代码;
阶段4:返回新对象。  
  
(3)了解构造函数和普通函数的区别后,我们使用构造将工厂模式的函数重写,并添加一个方法属性:
  
// 学生信息的构造函数
function Student(name,age){
this.name = name;
this.age = age;
this.alertName = function(){
alert(this.name)
};
} // 水果的构造函数
function Fruit(name,color){
this.name = name;
this.color = color;
this.alertName = function(){
alert(this.name)
} ;
}

  接着我们在创建Student和Fruit的对象

var s1 = new Student("cc",21);
var f1 = new Fruit("apple","red");

  (4)我们使用 instanof 操作符去检测

alert(s1 instanceof Student)  // true

alert(f1 instanceof Student) // false

alert(s1 instanceof Fruit ) // false

alert(f1 instanceof Fruit) // true

alert(s1 instanceof Object);  //true 任何对象均继承自Object
alert(f1 instanceof Object); //true 任何对象均继承自Object

  (5)构造函数的优化

    我们会发现Student和Fruit对象中共有同样的方法,当我们进行调用的时候这无疑是内存的消耗

  我们完全可以在执行该函数的时候再这样做,办法是将对象方法移到构造函数外部:   

function Student(name,age){
this.name = name;
this.age = age;
this.callName = callName;
}
function callName(){
alert(this.name);
}

  调用方式不变,仍然是创建对象,再调用。不同在于,在调用s1.alert()时,this对象才被绑定到s1上。

var s1 = new Student("cc",21);
var s2 = new Student("ss",22);

  我们通过将callName()函数定义为全局函数,这样对象中的callName属性则被设置为指向该全局函数的指针。

  由此stu1和stu2共享了该全局函数,解决了内存浪费的问题。

  但是,又有问题来了?

    通过全局函数的方式解决对象内部共享的问题,终究不像一个好的解决方法。如果这样定义的全局函数多了,

  我们想要将自定义对象封装的初衷便几乎无法实现了。更好的方案是通过原型对象模式来解决。

  4、原型的模式创建对象

    原型链甚至原型继承,是整个JS中最难的一部分也是最不好理解的一部分,我也不太理解,很难说清楚,

    下面给一个实例帮助大家来了解,更多内容可以去W3C的官网http://www.w3school.com.cn/index.html

    实例如下:

 function Student() {
this.name = 'cc';
this.age = 20;
} Student.prototype.alertName = function(){
alert(this.name);
}; var stu1 = new Student();
var stu2 = new Student(); stu1.alertName(); //cc
stu2.alertName(); //cc alert(stu1.alertName == stu2.alertName); //true 二者共享同一函数

二、JavaScript内置对象

  1、String对象

    (1)创建String对象的语法:

new String(s); // 当 String() 和运算符 new 一起作为构造函数使用时,它返回一个新创建的 String 对象,存放的是字符串 s 或 s 的字符串表示。

String(s);  // 当不用 new 运算符调用 String() 时,它只把 s 转换成原始的字符串,并返回转换后的值。

// 参数 s 是要存储在 String 对象中或转换成原始字符串的值。

    (2)String对象属性

constructor    对创建该对象的函数的引用。

length       字符串的长度

prototype  允许你像对象添加属性和方法

    (3)String(字符串)对象的方法,如下图所示:

  

  实例如下: 

    // String字符串对象
//length() 返回字符串长度
var str = 'Hello cc';
console.log(str.length); // // charAt() 返回指定索引的位置的字符
var strIndex = "abcd efg";
console.log(strIndex.charAt(3)); // d // concat() 返回字符串值,表示两个或多个字符串的拼接
var str1 = "hello ";
var str2 = "world!";
console.log(str1.concat(str2));// hello world! // match() 返回正则表达式模式对字符串进行产找,并将包含查找结果作为结果返回
console.log(strIndex.match('f')); // ["fg", index: 6, input: "abcd efg", groups: undefined] /* search(stringObject) 是否存在相应匹配。如果找到一个匹配,search方法将返回一个整数值,
指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,返回-1*/
var strSearch = "how are you ?";
console.log(strSearch.search('y')); //
console.log(strSearch.search('p')); // -1 // replace(a,b) 字符串b替换了a -- replace(a,b)
console.log(str.replace('cc','ab')); // Hello ab //slice(start,end) 返回start到end-1之间的字符串,索引从0开始
var strToEnd = "never give up ...";
console.log(strToEnd.slice(1,6)); // ever
// substr(start,end) ,左闭右开
var subStr = str.substr(1,3);
console.log(subStr); // ell // toUpperCase() 大写
var bigStr= str.toUpperCase();
console.log(bigStr) ; // HELLO CC // toLowerCase() 小写
var smallStr= str.toLowerCase();
console.log(smallStr) ;// hello cc // split(’a‘,1) 第一个参数是以什么样的字符串进行切割,第二个参数是返回的数组的最大长度
var newArr = str.split(' ',3);
console.log(newArr); // (2) ["Hello", "cc"]

  

  2、Number 对象

    在 JavaScript 中,数字是一种基本的数据类型,且只有一种数字类型。

    JavaScript 还支持 Number 对象,该对象是原始数值的包装对象。

    (1) 创建Number对象的语法   

var myNum = new Number(value);

var myNum = Number(value);

      注意:

      ① 极大或极小的数字可通过科学(指数)计数法来写:

var y=123e5;    //
var z=123e-5; // 0.00123

      ② 所有 JavaScript 数字均为 64 位

JavaScript 不是类型语言。与许多其他编程语言不同,JavaScript 不定义不同类型的数字,比如整数、短、长、浮点等等。

JavaScript 中的所有数字都存储为根为 10 的 64 位(8 比特),浮点数。

    (2)常用方法

// 1、toString()  将number类型转换成字符串类型
var num = 123.456;
var numStr = num.toString();
console.log(numStr,typeof numStr); // 23.456,string // 2、toFixed() 四舍五入,括号内的参数表示保留几位小数
var numNex = num.toFixed(2) ;
console.log(numNex); // 123.46

  3、Date 日期对象

    (1)创建日期对象

        创建日期对象只有构造函数一种方式,使用new关键字。   

// 创建一个date对象

var myDate = new Date();

    (2)常用方法及实例,如下图所示:

  

  4、Math函数

    (1)作用

      Math(算数)对象的作用是:执行常见的算数任务。

    (2)常用方法及实例如下所示:

      

  

三、JavaScript 错误 - Throw、Try 和 Catch

  1、含义:  

try 语句测试代码块的错误。

catch 语句处理错误

throw 语句创建自定义错误。

  2、用法:

JavaScript 测试和捕捉
try 语句允许我们定义在执行时进行错误测试的代码块。 catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。 JavaScript 语句 try 和 catch 是成对出现的。

    语法:  

try
{
//在这里运行代码
}
catch(err)
{
//在这里处理错误
}

  3、实例: 

!DOCTYPE html>
<html>
<head>
<script>
var txt="";
function message()
{
try
{
adddlert("Welcome guest!");
}
catch(err)
{
txt="There was an error on this page.\n\n";
txt+="Error description: " + err.message + "\n\n";
txt+="Click OK to continue.\n\n";
alert(txt);
}
}
</script>
</head> <body>
<input type="button" value="View message" onclick="message()">
</body> </html>

  4、Throw语句 

throw 语句允许我们创建自定义错误。

正确的技术术语是:创建或抛出异常(exception)。

如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。

  语法(异常可以是 JavaScript 字符串、数字、逻辑值或对象。):

throw exception

  实例;

<!DOCTYPE html>
<html>
<body> <script>
function myFunction()
{
try
{
var x=document.getElementById("demo").value;
if(x=="") throw "值为空";
if(isNaN(x)) throw "不是数字";
if(x>10) throw "太大";
if(x<5) throw "太小";
}
catch(err)
{
var y=document.getElementById("mess");
y.innerHTML="错误:" + err + "。";
}
}
</script> <h1>我的第一个 JavaScript 程序</h1>
<p>请输入 5 到 10 之间的数字:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">测试输入值</button>
<p id="mess"></p> </body>
</html>

四、JavaScript 表单验证

  1、含义:

    JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证。

  2、作用: 

JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证。

被 JavaScript 验证的这些典型的表单数据有:

用户是否已填写表单中的必填项目?
用户输入的邮件地址是否合法?
用户是否已输入合法的日期?
用户是否在数据域 (numeric field) 中输入了文本?

  3、必填或必选项目验证

    下面的函数用来检查用户是否已填写表单中的必填(或必选)项目。假如必填或必选项为空,那么警告框会弹出,

  并且函数的返回值为 false,否则函数的返回值则为 true(意味着数据没有问题): 

function validate_required(field,alerttxt)
{
with(field)
{
if(value==null || value=="")
{
alert(alerttxt);
return false;
}
else
{
return true;
}
}
}

    完整代码:  

<! DOCTYPE html>
<head>
<script type="text/javascript"> function validate_required(field,alerttxt)
{
with (field)
{
if (value==null||value=="")
{alert(alerttxt);return false}
else {return true}
}
} function validate_form(thisform)
{
with (thisform)
{
if (validate_required(email,"Email must be filled out!")==false)
{email.focus();return false}
}
}
</script>
</head> <body>
<form action="submitpage.htm" onsubmit="return validate_form(this)" method="post">
Email: <input type="text" name="email" size="30">
<input type="submit" value="Submit">
</form>
</body> </html>

 4、E-mail验证

  下面的函数检查输入的数据是否符合电子邮件地址的基本语法。

  输入的数据必须包含 @ 符号和点号(.)。同时,@ 不可以是邮件地址的首字符,并且 @ 之后需有至少一个点号:

function validate_email(field,alerttxt)
{
with (field)
{
apos=value.indexOf("@")
dotpos=value.lastIndexOf(".")
if (apos<1||dotpos-apos<2)
{
alert(alerttxt);
return false
}
else {return true}
}
}

    完整代码:

<! DOCTYPE html>
<head>
<script type="text/javascript">
function validate_email(field,alerttxt)
{
with (field)
{
apos=value.indexOf("@")
dotpos=value.lastIndexOf(".")
if (apos<1||dotpos-apos<2)
{alert(alerttxt);return false}
else {return true}
}
} function validate_form(thisform)
{
with (thisform)
{
if (validate_email(email,"Not a valid e-mail address!")==false)
{
email.focus();
return false
}
}
}
</script>
</head> <body>
<form action="submitpage.htm"onsubmit="return validate_form(this);" method="post">
Email: <input type="text" name="email" size="30">
<input type="submit" value="Submit">
</form>
</body> </html>

前端开发之JavaScript基础篇三的更多相关文章

  1. 前端开发之JavaScript基础篇一

    主要内容: 1.JavaScript介绍 2.JavaScript的引入方法和输出及注释 3.javaScript变量和命名规则 4.五种基本数据类型 5.运算符 6.字符串处理 7.数据类型转换   ...

  2. 前端开发之JavaScript基础篇四

    主要内容: 1.定时器 2.正则表达式入门 3.元字符 4.正则表达式实战运用 一.定时器 javaScript里主要使用两种定时器,分别是:setInterval()和setTimeout(). 1 ...

  3. 前端开发之JavaScript基础篇二

    主要内容: 1.流程控制条件语句和switch语句 2.for循环和while循环 3.Break语句和Continue语句 4.数组和数组常用方法 5.函数 6.对象 一.流程控制条件语句和swit ...

  4. 前端开发之javascript BOM篇

    主要内容: 1.BOM输出 2.BOM的对象 3.client的相关属性 4.offset的相关属性 5.scroll的相关属性 前情提要: 何谓BOM? 所谓 BOM 指的就是浏览器对象模型 Bro ...

  5. 前端开发之JavaScript篇

    一.JavaScript介绍  前端三剑客之JavaScript,简称js,可能是这三个里面最难的一个了.很早以前,市面上流通着三种js版本,为了统一,ECMA(欧洲计算机制造协会)定义了规范的版本, ...

  6. 前端开发之JavaScript HTML DOM实战篇

    实战案例一: “灯泡发光” <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  7. 前端开发之JavaScript HTML DOM理论篇一

    主要内容: 1.DOM简介 2.DOM 节点 3.DOM 方法和属性 4.DOM 访问和修改 一.DOM简介 1.什么是 DOM? DOM 是 W3C(万维网联盟)的标准. DOM 定义了访问 HTM ...

  8. 前端开发之JavaScript HTML DOM理论篇二

    主要内容: 1.HTML DOM元素 2.HTML DOM事件 一.DOM元素 主要操作有添加.删除和替换HTML元素 1.创建新的HTML元素  (1)方法一: appendChild() 追加 如 ...

  9. Hybrid App开发之JavaScript基础

    前言: 前面学习了html和css的基本使用,今天开始学习JavaScript的使用. 什么是JavaScript JavaScript是一种基于对象(Object)和事件驱动(Event Drive ...

随机推荐

  1. .NET程序下载获得的ContentLength=-1

    你写的.NET(C#)下载程序是否会遇到过这样的问题?--ContentLength=-1. 例如,有如下代码: HttpWebRequest webRequest = (HttpWebRequest ...

  2. [BZOJ2115][WC2011]最大XOR和路径

    bzoj luogu sol 首先很显然的,答案等于1到n的任意一条路径的异或和与若干个环的异或和的异或和. 因为图是联通的,那么就可以从一个点走到任意一个想要走到的环上,走完这个环后原路返回,那么中 ...

  3. 给StackPanel的子元素添加padding

    <StackPanel> <StackPanel.Resources> <Style TargetType="{x:Type TextBox}"> ...

  4. JS实现动态提示框

    引言 什么项目都有个需求,应开发需求,需要写一个公式编辑器选择公式的插件,下面给大家讲一下实现过程.(擦汗,强作淡定,咳,开嗓~) 看图说话 本小菜开发功能前乐于先写个需求思维导图(纯属个人爱好): ...

  5. android之ffmpeg:设置cygwin

    开发android ndk 的时候需要一个编译工具编译c程序,ndk需要linux下编译,所以win环境下提供Cygwin模拟linux编译C android-ndk 较低版本的这个工具的配置网上很多 ...

  6. mac 电脑下添加 HTMLtestrunner.py 生成 报表

    HTMLTestRunner是Python标准库unittest模块的一个扩展.它生成易于使用的HTML测试报告. 1.下载HTMLTestRunner.py模块地址 http://tungwaiyi ...

  7. Java经典练习题_Day04

    一.选择题 1. 下列关于数组的说法正确的是:(A) A. 在Java中数组的长度是可变的 B. 数组中存储的数据的类型是相同的 C. 数组在进行扩容操作的时候源数组的地址不发生改变 D. int[] ...

  8. C++四种强制转换

    C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 为什么使用C风格的强制 ...

  9. Shell教程快速入门

    Shell即是一种命令语言,又是一种程序设计语言,使用者可以通过Shell访问操作系统的内核服务. Shell编程和java.python.C一样,只要一个能编写代码的文本编辑器和一个能解释执行的脚本 ...

  10. Druid.io系列(八):部署

    介绍 前面几个章节对Druid的整体架构做了简单的说明,本文主要描述如何部署Druid的环境 Imply提供了一套完整的部署方式,包括依赖库,Druid,图形化的数据展示页面,SQL查询组件等.本文将 ...