js学习(四)

一、typeof 操作符,null, undefinde

1、 typeof 操作符来检测变量的数据类型。

typeof "John"                // 返回 string
typeof 3.14                  // 返回 number
typeof false                 // 返回 boolean
typeof [1,2,3,4]             // 返回 object
typeof {name:‘John‘, age:34} // 返回 object

在JavaScript中,数组是一种特殊的对象类型。 因此 typeof [1,2,3,4] 返回 object。

2、在 JavaScript 中 null 表示 "什么都没有"。null是一个只有一个值的特殊类型。表示一个空对象引用。

var person = null;           // 值为 null(空), 但类型为对象,用 typeof 检测 null 返回是object。

3、undefined在 JavaScript 中, undefined 是一个没有设置值的变量。typeof 一个没有值的变量会返回 undefined。 

var person;                  // 值为 undefined(空), 类型是undefined

区别:

typeof undefined             // undefined
typeof null                  // object
null === undefined           // false
null == undefined            // true

二、JavaScript 数据类型

1、在 JavaScript 中有 5 种不同的数据类型:String、number、boolean、function、object

2、3 种对象类型:Object 、 Date、Array

  • 数组(Array)的数据类型是 object
  • 日期(Date)的数据类型为 object

3、2 个不包含任何值的数据类型:null、undefined

4、constructor 属性 : constructor 属性返回所有 JavaScript 变量的构造函数。

"John".constructor                 // 返回函数 String()  { [native code] }

四、JavaScript 类型转换

JavaScript 变量可以转换为新变量或其他数据类型:

  • 通过使用 JavaScript 函数 : Number() 转换为数字, String() 转换为字符串, Boolean() 转化为布尔值。
  • 通过 JavaScript 自身自动转换:当 JavaScript 尝试操作一个 "错误" 的数据类型时,会自动转换为 "正确" 的数据类型。
Number("3.14")    // 返回 3.14
Number(" ")       // 返回 0
Number(false)     // 返回 0
String(123)       // 将数字 123 转换为字符串并返回
5 + null    // 返回 5         null 转换为 0
"5" + null  // 返回"5null"   null 转换为 "null"

五、JavaScript 正则表达式

1、正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

   搜索模式可用于文本搜索和文本替换。

2、语法:/正则表达式主体/修饰符(可选)

3、使用字符串方法

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

  replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

var str = "Visit Runoob!";
var n = str.search(/Runoob/i);//Runoob是正则表达式主体   i为修饰符
输出结果:6
//使用正则表达式且不区分大小写将字符串中的 Microsoft 替换为 Runoob 

<p id="demo">请访问 Microsoft!</p>
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"Runoob");

输出结果:请访问 Runoob!

4、修饰符

  

5、test() : 检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

//搜索字符串中的字符 "e":
var patt = /e/;
patt.test("The best things in life are free!");

/e/.test("The best things in life are free!"); //前两句可以合成一句

输出结果为:true true

6、exec() 方法用于检索字符串中的正则表达式的匹配。

  该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

/e/.exec("The best things in life are free!");

输出结果:e

六、调试(F12)

1、console.log() 方法 :控制台输出

 设置断点

  在调试窗口中,你可以设置 JavaScript 代码的断点。

  在每个断点上,都会停止执行 JavaScript 代码,以便于我们检查 JavaScript 变量的值。

  在检查完毕后,可以重新执行代码(如播放按钮)。

2、debugger 关键字

  debugger 关键字用于停止执行 JavaScript,并调用调试函数。

  这个关键字与在调试工具中设置断点的效果是一样的。如果没有调试可用,debugger 语句将无法工作。

  开启 debugger ,代码在第三行前停止执行。

var x = 15 * 5;
debugger;
document.getElementbyId("demo").innerHTML = x;

七、JavaScript 变量提升

1、JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。

2、JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

  对于大多数程序员来说并不知道 JavaScript 变量提升。如果程序员不能很好的理解变量提升,他们写的程序就容易出现一些问题。

3、为了避免这些问题,通常我们在每个作用域开始前声明这些变量,这也是正常的 JavaScript 解析步骤,易于我们理解。

八、JavaScript 严格模式(use strict):即在严格的条件下运行

1、使用 "use strict" 指令 :只允许出现在脚本或函数的开头

  (1)严格模式下不能使用未声明的变量。

  (2)不允许删除变量或对象。不允许删除函数。不允许变量重名;不允许使用八进制:不允许使用转义字符......

"use strict";
 x = 3.14;       // 报错 (x 未定义)

"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

九、JavaScript this 关键字

1、面向对象语言中 this 表示当前对象的一个引用。

2、但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

  • 在对象方法中,this 表示该方法所属的对象。
  • 如果单独使用,this 表示全局对象。
  • 在函数中,this 表示全局对象。
  • 在函数中,在严格模式下,this 是未定义的(undefined)。
  • 在事件中,this 表示接收事件的元素。
  • 类似 call() 和 apply() 方法可以将 this 引用到任何对象。

十、JavaScript的 let 和 const

var i = 5;
for (var i = 0; i < 10; i++) {
    // 一些代码...
}
// 这里输出 i 为 10
let i = 5;
for (let i = 0; i < 10; i++) {
    // 一些代码...
}
// 这里输出 i 为 5

1、从例子可以看出:

在第一个实例中,使用了 var 关键字,它声明的变量是全局的,包括循环体内与循环体外。

在第二个实例中,使用 let 关键字, 它声明的变量作用域只在循环体内,循环体外的变量不受影响。

const PI = 3.141592653589793;
PI = 3.14;      // 报错
PI = PI + 10;   // 报错

2、const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改;

   const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。但是我们不能对常量对象重新赋值:

// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};

// 修改属性:
car.color = "red";

// 添加属性
car.owner = "Johnson";

const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"};    // 错误

3、在相同的作用域或块级作用域中,不能使用 const 关键字来重置 var 和 let关键字声明的变量:

   在相同的作用域或块级作用域中,不能使用 const 关键字来重置 const 关键字声明的变量:

var x = 2;    //  合法
var x = 3;    //  合法
x = 4;        //  合法

var x = 2;         // 合法
const x = 2;       // 不合法
{
    let x = 2;     // 合法
    const x = 2;   // 不合法
}
const x = 2;       // 合法
const x = 3;       // 不合法

十一、JavaScript JSON

1、什么是 JSON?

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

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

3、JSON 语法规则

  • 数据为 键/值 对。
  • 数据由逗号分隔。
  • 大括号保存对象
  • 方括号保存数组
  • {"name":"Runoob", "url":"www.runoob.com"}

4、JSON 格式在语法上与创建 JavaScript 对象代码是相同的。所以 JavaScript 程序可以很容易的将 JSON 数据转换为 JavaScript 对象。

   怎么转化:通常我们从服务器中读取 JSON 数据,并在网页中显示数据。然后,使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象: 

var text = ‘{ "sites" : [‘ +
    ‘{ "name":"Runoob" , "url":"www.runoob.com" },‘ +
    ‘{ "name":"Google" , "url":"www.google.com" },‘ +
    ‘{ "name":"Taobao" , "url":"www.taobao.com" } ]}‘;

obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.sites[1].name + " " + obj.sites[1].url;

原文:https://www.runoob.com/js/js-conventions.html

  

原文地址:https://www.cnblogs.com/dongtian-blogs/p/10802579.html

时间: 2024-08-04 23:27:25

js学习(四)的相关文章

JS学习四(BOM DOM)

BOM                Screen对象 console.log(window.width);//屏幕宽度 console.log(window.height);//屏幕高度 console.log(window.availWidth);//屏幕可用宽度 console.log(window.availHeight);//屏幕可用宽度 ★  location对象 取到浏览器的URL地址信息: 完整的URL路径: 协议名://主机名(IP地址):端口号/文件所在路径?传递参数(nam

vue.js 学习四(指令和自定义指令)

官方的指令说明已经很简单了,这里再写一遍,也是自己加深一下印象 v-text 就是写入单纯的文本,可以忽略这个指令直接双花括号代替 <span v-text="msg"></span> <!-- 和下面的一样 --> <span>{{msg}}</span> v-html 更新元素的 innerHTML,如果取回的值里面包含了html的样式,可以使用这个指令. 以下抄写了官方注意事项,对于用户输入的HTML,显示的时候需要谨慎

【Node.js学习四】 Node.js回调函数

Node.js 回调函数 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数. 例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回.这样在执行代码时就没有阻塞或等待文件 I/O 操作.这就大大提高了 Node.js 的性能,可以处理大量的并发请求. 下面对阻塞代码和非阻塞代码分别举出一例

前端学习(26)~js学习(四):基本数据类型vs引用数据类型

在上一篇文章中,我们介绍过,变量有以下数据类型: 基本数据类型(值类型):String 字符串.Number 数值.Boolean 布尔值.Null 空值.Undefined 未定义. 引用数据类型(引用类型):Object 对象. 本文,我们针对这两种类型,做进一步介绍.我们先来看个例子. 基本数据类型举例: var a = 23; var b = a; a++; console.log(a); // 打印结果:24 console.log(b); // 打印结果:23 上面的代码中:a 和

nodejs学习四 Node.js NPM

什么是NPM? 不知道大家注意没有,windows平台下的Node.js安装包大小才区区4M多,真可以用短小精悍来形容它,作为一种编程语言,像java一个SDK 就几十M,为什么node.js的运行环境这么小呢?这其中的微妙之处在于,它拥有一个庞大的第三方软件库. 在Node本身提供的包(原生)中没有我们要实现的功能模块的时候,我们可以去寻找下是否已经有人实现了这种功能.毕竟重复造轮子这种事情,很多人都不想干. 去哪里寻找我们想要的包呢?如果你还不知道报的名字,你可以去https://www.n

springMVC3学习(四)--访问静态文件如js,jpg,css

如果你的DispatcherServlet拦截的是*.do这样的URL,就不存在访问不到静态资源的问题 如果你的DispatcherServlet拦截了"/"所有的请求,那同时对*.js,*.jpg的访问也就被拦截了. 我们在进行springMVC开发时,必定会在jsp页面引入js.img和css等文件. 大多数人会将这些分类存放在WebRoot文件下新建的文件夹下面. 同时,会在web.xml文件中配置拦截所有请求.这样就造成了页面无法访问到js.img和css文件夹中的文件了 方法

Ext JS学习第五天 我们所熟悉的javascript(四)

此文用来记录学习笔记: •javascript之对象.面向对象 •可能对于高级语言你可能了解甚至精通OOP面向对象,那么对于javascript你又熟悉多少呢?我们一起来学习javascript面向对象,这样非常有帮助我们理解Ext的基础架构,Ext本身就是一个JS面向对象的框架. •使用json对象(JavaScript Object Notation) –JS对象的特性 –对于js来说json对象非常的重要,我们要学会如何操作json对象 •面向对象的概念 –如何定义一个类.如何实例化对象.

Ext JS学习第四天 我们所熟悉的javascript(三)

此文用来记录学习笔记: •javascript之函数 •this关键字的使用 –this关键字总是指向调用者,谁调用函数,this就指向谁 •call.apply的使用 –call和apply主要应用与框架底层,用于绑定函数的执行环境/作用域 •块的概念 –和高级程序语言不同,js里没有块的概念,我们一般用小括号包裹块级作用域 •闭包:掌握闭包必须要深入清楚的概念 –执行环境 –作用域链 –垃圾回收机制 附上栗子 代码 1 // This 关键字 在javascript里的使用 2 //this

JS地毯式学习四

1  窗口的位置 用来确定和修改 window 对象位置的属性和方法有很多. IE . Safari . Opera 和 Chrome都提供了 screenLeft 和 screenTop 属性,分别用于表示窗口相对于屏幕左边和上边的位置 .Firefox 则在 screenX 和 screenY 属性中提供相同的窗口位置信息, Safari 和 Chrome 也同时支持这两个属性. // 跨浏览器的方法var leftX = (typeof screenLeft == 'number') ?

JS学习笔记-OO疑问之对象创建

问一.引入工厂,解决重复代码 前面已经提到,JS中创建对象的方法,不难发现,基本的创建方法中,创建一个对象还算简单,如果创建多个类似的对象的话就会产生大量重复的代码. 解决:工厂模式方法(添加一个专门创建对象的方法,传入参数避免重复) function createObject(name,age){ var obj =new Object(); //创建对象 obj.name = name; obj.age = age; obj.run = function(){ return this.nam