JavaScript学习笔记(二)

JavaScript数据类型

在 JavaScript 中的数据类型:
string(字符串)、number(数字,NaN也属于其)、Boolean(逻辑)、object(对象,包括Object,Array<数组>,Date<日期>,null<空对象>)、function(函数)、、undefined(未设置)
ps:JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型


  • 声明变量类型
    当声明新变量时,可以使用关键词 "new" 来声明其类型:
    var y= new Boolean;
  • typeof 操作符:用于返回变量或表达式类型
    null与undefined:均表示什么都没有,且都可以用来清空变量;null类型为object,undefined类型为undefined
  • constructor属性:返回所有变量的构造
    "john".constructor 得到
    function String() { [native code] }
    因此可以用来判断typeof无法判断区分的Array和Date:
    var fruits = ["Banana", "Orange", "Apple", "Mango"];
    document.getElementById("demo").innerHTML = isArray(fruits);
    function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
    }
    个人目前理解的是:可以用isArray()判断是否为数组,而该函数的代码块是以constructor为核心的。
JavaScript 类型转换

方法:1.通过使用 JavaScript 函数;2.通过 JavaScript 自身自动转换

  • 转化为字符串:
  1. String(x),适用于任何类型的数字,字母,变量,表达式
  2. x.toString Boolean和Date()也适用,其他不清楚
  • 转化为数字
    Number()
  • 字符串转化为数字,包含数字转化为数字,空字符转化为0,其他字符(如"99 88")转化为NaN(不是个数字)
  • Boolean中true转化为1,false转化为0
  • 日期转化为数字
    d = new Date(); 法一
    Number(d)
    d = new Date(); 法二
    d.getTime()

Operator + 也可用于将变量转换为数字

JavaScript 错误 - throw、try 和 catch

try 语句测试代码块的错误;catch 语句处理错误;throw 语句创建自定义错误

JavaScript 抛出(throw)错误:当错误发生,事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息,称之为JavaScript 将抛出一个错误。

  • JavaScript try 和 catch
    try语句中的代码在执行时会对其进行错误检测,catch语句定义当try代码块发生错误时,所执行的代码块。
    try与catch在JavaScript中总是成对出现。
    try {
    //在这里运行代码
    } catch(err) {
    //在这里处理错误
    }

var txt=""; 
function message() 
{ 
    try { 
        adddlert("Welcome guest!"); //alert拼错为adddlert
    } catch(err) { 
        txt="本页有一个错误。\n\n"; //\n用于换行
        txt+="错误描述:" + err.message + "\n\n";//用于显示try代码块中的错误信息 
        txt+="点击确定继续。\n\n"; 
        alert(txt); 
    } 
}
  • Throw语句
    用于创建或抛出异常。如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。
    throw exception
    异常可以是 JavaScript 字符串、数字、逻辑值或对象。
    exception为后面的err的内容,即错误信息

JavaScript正则表达式(regex或RE)

/正则表达式主体/修饰符(可选)
search() 和 replace()

search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式或字符串相匹配的子字符串,并返回子串的起始位置。
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式或字符串匹配的子串。

  • search() 方法
    使用正则表达式搜索 "Runoob" 字符串,且不区分大小写
    var str = "Visit Runoob!";
    var n = str.search(/Runoob/i);
    使用字符串作为参数,字符串参数会转换为正则表达式,区分大小写
    var str = "Visit Runoob!";
    var n = str.search("Runoob");
    输出为数字,即字串的起始位置

  • replace()方法
    同上
    var str = document.getElementById("demo").innerHTML;
    var txt = str.replace(/microsoft/i,"Runoob");

正则表达式使得搜索功能更加强大(如实例中不区分大小写)。

正则表达式模式和修饰符详见http://www.runoob.com/js/js-regexp.html

使用 RegExp 对象

在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象。

  • 使用 test()
    est() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false
  • 使用exec()
    exec() 方法用于检索字符串中的正则表达式的匹配,该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

JavaScript 调试(console)

  • console.log() 方法
    可以使用 console.log() 方法在调试窗口上打印 JavaScript 值
  • 设置断点
    在调试窗口中,你可以设置 JavaScript 代码的断点
    在每个断点上,都会停止执行 JavaScript 代码,以便于我们检查 JavaScript 变量的值
    在检查完毕后,可以重新执行代码(如播放按钮)
  • debugger 关键字
    debugger 关键字 与在调试工具中设置断点的效果是一样的
    如果没有调试可用,debugger 语句将无法工作

JavaScript变量提升

变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部JavaScript 只有声明的变量会提升,初始化的不会
var y为变量声明 var y=7为变量初始化
ps: JavaScript 严格模式(strict mode)不允许使用未声明的变量

JavaScript 严格模式(use strict)

"use strict" 的目的是指定代码在严格条件下执行
严格模式下你不能使用未声明的变量

"use strict" 指令只运行出现在脚本或函数的开头

严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明

/*在函数内部声明是局部作用域 (只在函数内使用严格模式)*/
x = 3.14;       // 不报错 
myFunction();

function myFunction() {
   "use strict";
    y = 3.14;   // 报错 (y 未定义)
}

严格模式体现了Javascript更合理、更安全、更严谨的发展方向,为未来新版本的Javascript做好铺垫
具体限制

JavaScript易错点总结

JavaScript 表单验证

表单验证分为JS验证和浏览器自动验证。required属性用于进行自动验证,约束验证(HTML5);
也分为服务端数据验证和客户端数据验证side validation

  • 验证输入内容是否为空
    function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if (x == null || x == "") {
    alert("需要输入名字。");
    return false;
    }
    }
    <form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
    名字: <input type="text" name="fname">
    <input type="submit" value="提交">
    </form>
  • 验证输入的数字
  • 自动验证
    <form action="demo_form.php" method="post">
    <input type="text" name="fname" required>
    <input type="submit" value="提交">
    </form>
  • 必填(或必选)项目
    function validateForm()
    {
    var x=document.forms["myForm"]["fname"].value;
    if (x==null || x=="")
    {
    alert("姓必须填写");
    return false;
    }
    }
    <form name="myForm" action="demo-form.php" onsubmit="return validateForm()" method="post">
    姓: <input type="text" name="fname">
    <input type="submit" value="提交">
    </form>
  • E-mail 验证

indexOf lastIndexOf用于表示搜索字符的位置

  function validateForm(){
    var x=document.forms["myForm"]["email"].value;
    var atpos=x.indexOf("@");
    var dotpos=x.lastIndexOf(".");
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
      alert("不是一个有效的 e-mail 地址");
      return false;
    }
  }
  <form name="myForm" action="demo-form.php" onsubmit="return       validateForm();" method="post">
      Email: <input type="text" name="email">
      <input type="submit" value="提交">
  </form>
  • JavaScript保留关键字
    建议不要使用const 有的浏览器引擎支持它等价于var

JSON

JSON 是用于存储和传输数据的格式。
JSON 通常用于服务端向网页传递数据 。

JSON 英文全称 JavaScript Object Notation, 是一种轻量级的数据交换格式,是独立的语言。

JavaScriptvoid

void 是 JavaScript 中非常重要的关键字,该操作符指定要计算一个表达式但是不返回值。

  • href="#"与href="javascript:void(0)"的区别
    # 包含了一个位置信息,默认的锚是#top 也就是网页的上端。
    而javascript:void(0), 仅仅表示一个死链接。
    在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id。
    如果你要定义一个死链接请使用 javascript:void(0) 。

  • 语法格式
    <head>
    <script type="text/javascript">

    或者
    
    void(func())
    javascript:void(func())
    //-->
    </script>
    </head>
    

JavaScript 代码规范

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,908评论 6 541
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,324评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,018评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,675评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,417评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,783评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,779评论 3 446
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,960评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,522评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,267评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,471评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,009评论 5 363
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,698评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,099评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,386评论 1 294
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,204评论 3 398
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,436评论 2 378

推荐阅读更多精彩内容