学习笔记(二)JavaScript基本概念(语法,数据类型,控制语句,函数)

一.语法

1.javascirpt中一切(变量,函数名和操作符)是严格区分大小写的。

2.javascript(标识符)

所谓标识符,就是指变量,函数,属性的名字,或者函数的参数。

命名规则:第一个字符必须是一个字母、下划线、美元符号,其它字符可以是字母、下划线、美元符号或数字。

不能把关键字,保留字,true,false和null用作标识符。

3.ECMAScript标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词的首字母大写。(但是没有谁强制要求这个格式)

4.注释

//单行注释
/*
*这是多行注释
*/

5.语句

每条语句最好用一个分号结尾,但是也可以省略分号。

可以把多条语句组合到一个代码块中,及代码块以左花括号({)开头,以右花括号(})结尾。

if (test) 
alert(test); //有效但容易出错,最好不要使用

if (test) {

alert(test);//推荐使用
}

6.关键字和保留字

 

 

7.变量

变量是松散类型的,可以用来保存任何类型的数据。使用关键字var来声明变量。

var message; 像这样未经过初始化的变量会保存一个特殊的值undefined

obj=100; 这样虽然有效,但不推荐,这样相当于声明了一个全局变量

二. ECMAScript有5种简单数据类型:Undefined,Null,Boolean,Number和String以及1种复杂数据类型Object 

1.typeof操作符:一元操作符,操作数可以是变量或数字字面量,用来检测给定变量的数据类型。

可能的返回值:

1). 'undefined' --- 这个值未定义;

2). 'boolean'    --- 这个值是布尔值;

3). 'string'        --- 这个值是字符串;

4). 'number'     --- 这个值是数值;

5). 'object'       --- 这个值是对象或null;

6). 'function'    --- 这个值是函数。

2.Undefined类型只有一个值,即特殊的undefined.

var message;

alert(message==undefined); //true

包含undefined值的变量与尚未定声明的变量还是不一样。

var message;

//var age;
alert(message); //undefined
alert(age); //产生错误

对尚未声明的变量执行typeof,结果返回undefined,对尚未初始化的变量执行typeof,结果返回undefined

var message;

//var age;
alert(typeof message); //undefined
alert(typeof age); //undefined

最好显示的初始化变量,这样的话当typeof操作符返回undefined值时,我们就知道被检测的变量没有被声明,而不是尚未初始化,因为没有声明的变量用typeof操作符就会直接返回undefined

3.null类型

null类型只有一个值,即特殊的null. null值表示一个空对象指针,typeof操作符检测null值返回“object”。

null与undefined之间的相等操作符(==)进行比较总是返回true。

4.Boolean类型

只有两个字面值:true和false,这两个值与数字值不一样,true不一定等于1,false不一定等于0,这两个字面值区分大小写。

要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()。

javascript中,任何的数据类型调用转型函数Boolean(),总会返回一个Boolean值,各种数据类型及转换规则如下:

5.Number类型

包括整数和浮点数

1).整数包括十进制,八进制字面值和十六进制的字面值。

八进制字面值的第一位必须是零,十六进制的字面值的前两位必须是0x。

在进行算术计算时,八进制字面值和十六进制的字面值最终会转换成十进制数值。

2).浮点数

所谓浮点数值,该数值中必须包含一个小数点,并且小数点后必须至少有一位数字。小数点前面可以没有整数,但是不推荐这样使用。

  浮点数可以这样:var floatNum = .1;但是不推荐这样使用。

  由于保存浮点数值需要的内存空间是整数值的两倍,因此不失时机的将浮点数值转换为整数值。如果浮点数小数点后面没有任何数字,那个这个数值就可以被作为整数值来保存,同样,如果浮点数本身就表示一个整数(如1.0)那么该值也会被转换为整数。

对于极大和极小数值,使用科学计数法。浮点数值最高精度是17位小数。

     Number.MAX_VALUE整数的最大值

  Number.MIN_VALUE整数的最小值

  如果计算得到一个超出javascript数值范围的值,那么这个数值自动转换为特殊的Infinity,如果某次返回正的或负的Infinity值,那么该值将无法继续参与下一次计算

  要想确定一个数值是不是有穷的,可以使用isFinite(number )函数,如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。

  访问Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY可以得到正和负的Infinity的值,所以其实这两个属性分别保存着-Infinity和Infinity

3).  NaN

      NaN特点:1任何涉及到NaN的操作都会返回NaN,2NaN与任何值都不相等,其中包括NaN本身 。

      isNaN()这个函数接受一个参数,该参数可以是任何类型,而此函数会帮我们确定这个参数是否“不是数值”,不是数值返回true。

      isNaN()这个函数接受一个参数,会尝试将这个值转换为数值。任何不能被转换为数值的值都会导致该函数返回true。

      alter(isNaN(NaN));//true

     alter(isNaN(10));//false

     alter(isNaN("10"));///false

     alter(isNaN("red"));//true

     alter(isNaN(true));//true

4).数值转换

有三个函数可以将非数值转换为数值:Number(),parseInt(),parseFloat()

转型类型Number()可以用于任何数据类型,parseInt(),parseFloat()专门用于将字符串转换成数值。

Number()函数的转换规则如下:

(1)如果是Boolean值,true和false将分别被转换为1和0
(2)如果是是数字值,只是简单的传入和返回
(3)如果是null值,返回0
(4)如果是undefined,返回NaN
(5)如果是字符串,遵循下列规则:
        如果字符串中只包含数字,则将其转换为十进制数值,级“1”会变成1,“123”会变成123,而“011”会变成11(前面的0被忽略了)
        如果字符串中只包含有效的浮点格式,如“1.1”,则将其转换为对应浮点数值(同样,也会忽略前导零)
        如果字符串中只包含有效的十六进制格式,例如“0xf”,则将其转换为相同大小的十进制整数值
        如果字符串是空的(不包含任何字符),则将其转换为0
         如果字符串中包含除上述格式之外的字符,则将其转换为NaN
(6)如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()把各种数据类型转换为数值确实有点复杂。下面是几个具体例子:
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number("true"); //1

parseInt()

parseInt()函 数在转换字符串时,它会忽略字符串前面的空格,直至找到第一个非空格字符。

如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN(Number()对空字符串返回0)。

如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。

例如,“123blue”会被转换为 1234,因为“blue”会被完全忽略。类似地,“22.5”会被转换成22,因为小数点并不是有效的数字字符。

如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式(即十进制、八进制、十六进制)。也就是说,如果字符串以 “0x”开头且后跟数字字符,就会将其当作一个十六进制整数;如果字符串以“0”开头且后跟数字字符,则将其当作一个八进制数或十进制来解析。

  为了更好地理解parseInt()函数的转换规则,下面给出了一些例子:

var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA") //10(十六进制)
var num4 = parseInt("22.5"); //22
var num5 = parseInt("070"); //56或70(八进制)
var num6 = parseInt("70"); //(70)十进制
var num7 = parseInt("0xF") //15(十六进制)

parseInt()解析“070”,导致上述困惑,ECMAScript也为这个函数提供了第二个参数:转换时使用的基数(即多少进制)。

指定基数会影响到转换的输出结果。

var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN
  这个例子中的第一个转换成功了,而第二个则失败了。差别在于第一个转换传入了基数,明确告诉parseInt()要解析一个十六进制格式的字符串;而第二个转换发现第一个字符不是数字字符,因此就自动终止了。

var num1 = parseInt("10", 2); //2
var num2 = parseInt("10", 8);  //8
var num3 = parseInt("10", 10); //10
var num4 = parseInt("10", 16); //16

parseFloat()

parseFloat()也是从第一个字符(位置0)开始解析每个字符,一直解析到字符串末尾,或解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点是无效的,因此它后面的字符串将被忽略。举例来 说,“22.34.5”将会被转换为22.34。

  除了第一个小数点有效之外,parseFloat()与parseInt()的第二个区别在于它始终都会忽略前导零。由于parseFloat()只解析十进制值,因此 它没有用第二个参数指定基数的用法。十六进制格式的字符串始终会被转换为0。最后还要注意一点:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后面都是 零),parseFloat()会返回整数。以下是使用parseFloat()转换数值的几个典型示例:

var num1 = parseFloat("1234blue"); //1234
var num1 = parseFloat("0xA"); //0
var num1 = parseFloat("22.5"); //22.5
var num1 = parseFloat("22.34.5"); //22.34
var num1 = parseFloat("0908.5"); //908.5
var num1 = parseFloat("3.125e7"); //31250000

6.String类型

用双引号表示的字符串和用单引号表示的字符串完全相同,任何字符串长度都可以通过其length属性取得。

字符串的特点:字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用一个包含新值的字符串填充该变量。

toString()-转换为字符串

数值的toString()方法:把一个数值转换为字符串,返回该数值的字符串表现形式。可以传入一个基数,可以以十进制,八进制和十六进制的格式返回数值的字符串表现形式。

字符串toString()方法:返回字符串的一个副本。

转换为字符串方法toString(),数值、布尔值、对象和字符串都有些方法,但null和undefined值没有此方法

在不知道值为null或undefined值时,可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串,String()函数遵循转换规则:1). 如果值有toString()方法,则调用该方法(没有参数)返回相应的结果2). 如果值是null则返回"null"3). 如果值为undefined则返回"undefined"

7.Object类型

ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过new操作符来创建。在ECMAScript中,如果不能构造函数传递参数,则可以省略后面的那一对圆括号

如下所示

var obj = new Object();
var obj = new Object;//但一般不推荐这种写法。

Object的每个实例都具有下列属性和方法

    constructor保存着用于创建当前对象的构造函数

  hasOwnProperty(propertyName)用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在

  isPrototypeOf(object)用于检查传入的对象是否是另一个对象的原型

  propertyIsEnumerable(propertyName)用于检查给定的属性是否能够使用for-in语句来枚觉。

      toLocalString()返回对象的字符串表示,该字符串与执行环境的地区对应。

      toString()返回对象的字符串表示。

      valueOf()返回对象的字符串,数值,布尔值表示,返回指定对象的原始值。

每个JavaScript固有对象的 valueOf 方法定义不同。

 

对象返回值
Array数组的元素被转换为字符串,这些字符串由逗号分隔,连接在一起。其操作与 Array.toString 和 Array.join 方法相同。
BooleanBoolean 值。
Date存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function函数本身。
Number数字值。
Object对象本身。这是默认情况。
String字符串值。

Math 和 Error 对象没有 valueOf 方法。

三.函数

一. 函数使用function关键字来声明,后跟一组参数及函数体。

function sayHi(name,message){

      alter("hello"+name+","+message);

}

函数的调用:通过函数名来调用,后面加一对圆括号和参数。

sayHi("Nike","How are you today?");

函数中return语句之后的任何代码都永远不会执行

return 语句也可以不带有任何返回值,这种情况 下,函数在停止执行后将返回undefined值 

function sum(num1,num2){

return num1+num2;

alter("Hello");//永远不会被执行

}

sum(5,10);

 二.javascript的函数参数

javascript的函数参数与其它语言有所不同,它不介意传进来多少个参数,也不介意传进来的参数是什么数据类型。原因是javascript的函数参数在内部是用一个数组来表示,函数接收到的始终是这个数组,不关心数组中包含哪些参数,不包含参数也没关系。在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。

可以使用方括号语法访问他的每个参数(arguments[0]第一个参数,arguments[1]第二个参数,。......)

通过arguments对象的length属性可以获得有多少个参数传递给了函数,没有传递值的命名参数将自动被赋予undefined值(ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数)

上面的函数可以重写,不显示地使用命名参数

function sayHi(){

      alter("hello"+arguments[0]+","+arguments[1]);//arguments[0]对应与name参数

}

命名参数可以与arguments对象一同使用,arguments的值永远与对应的命名参数的值同步。修改命名参数的值不会改变arguments的值,修改arguments的值会改变命名参数的值。

function doAdd(num1,num2){
  arguments[1]=10;
  alert(arguments[0]+num2);//10
}
  doAdd(0,20);

ECMAScript所有参数传递的都是值,不可能通过引用传递参数

三. ECMAScript函数没有重载

重载是指定义两个名字相同的函数,只要这两个定义的签名(接受参数的类型和数量)不同即可。

ECMAScript中两个名字相同的函数,后定义的函数覆盖了先定义的函数。

function addSomeNumber(num){

  return num+100;

}

function addSomeNumber(num){

  return num+200;

}

var result = addSomeNumber(100); //300

 

注意:与其它语言不同,ECMAScript没有为整数和浮点数值分别定义不同的数据类型,Numer类型可用于表示所有数值

ECMAScript中无须指定函数的返回值,因为任何ECMAScript函数都可以在任何时候返回任何值

ECMAScript函数中函数参数是以一个包含零或多个值的数组的形式传递的

可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数

转载于:https://www.cnblogs.com/qinxuemei/p/4017981.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android悬浮窗口的实现

效果图:(悬浮框可拖动) 在项目开发中有一个需求:弹出悬浮窗后,响应悬浮窗的事件再弹出对话框,但是对话框怎么也不显示。也就是说在弹出悬浮框的同时,不能再弹出对话框,可能的原因&am…

Android之invalid address or address of corrupt block 0xabb494a0 passed to dlfree崩溃解决办法

1、问题 手机崩溃 invalid address or address of corrupt block 0xabb494a0 passed to dlfree Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdeadbaad in tid 29629 (AsyncTask #1) #00 pc 000308a6 /system/lib/libc.so (dlfree1285) 2、原因 const char* 转char *的…

软件配置管理(三)软件配置管理核心功能

文章目录一、CMM/CMMI与软件配置管理产品完整性二、三库管理三、基线管理基线管理的好处基线管理的步骤四、配置库管理五、变更管理变更管理流程六、配置审计七、配置状态报告一、CMM/CMMI与软件配置管理 软件配置管理是CMM/CMMI二级(可重复级)的一个重…

移除指定 global using 命名空间

前言在《.NET 6新特性试用 | 隐式using指令》中&#xff0c;我们介绍过&#xff0c;开启隐式using指令时&#xff0c;会在编译时生成 GlobalUsings.g.cs 文件&#xff0c;加入大量 global using 指令&#xff1a;// <auto-generated/> global using global::Microsoft.As…

Ubuntu 每日技巧- 自动备份Ubuntu 14.04到Box云存储上

Ubuntu 每日技巧- 自动备份Ubuntu 14.04到Box云存储上 如今你已经升级或者安装了Ubuntu 14.04&#xff0c; 但是还有另外一件保护你的新系统需要做的事情&#xff1a;备份&#xff01; Ubuntu内置了一个备份工具 Dj Dup Backup Tool。它允许你备份你的系统并保存在本地或者通过…

程序员学好英语的方法(转)

英语对每个人来说都很重要&#xff0c;对于程序员来说尤其的重要&#xff0c;因为一些框架都是外国大佬写的&#xff0c;我们要时时的阅读 API,而这些 API 大多数都是英文了&#xff0c;所以我们程序员对英语的要求还是蛮高的。下面我整理的一些学习英语的方法&#xff0c;分享…

软件配置管理(四)代码味道与重构

文章目录重构的概念及意义代码味道代码味道分类1.类内味道1.1 可度量的味道-Measured Smells1.1.1 过长函数-Long Method1.1.2 过大类-Large Class1.1.3 过长参数列-Long Parameter List1.1.4 过多的注释-Comments1.2 不必要的复杂性-Unnecessary Complexity1.2.1 夸夸其谈的未…

Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称...

Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感 是印度上古时期一些文献的总称 1. 印度古《吠陀》经&#xff0c;是印度上古时期一些文献的总称&#xff0c; 1 1.1.1. 医学意义 2 2. 梨俱吠陀&#xff08;篇章规模&#xff0c;字数&#xff09; 2 2.1. 神曲结构模式编辑 2 …

【C#/.NET 日常开发技巧】JWT+ActionFilter 简便控制器代码

微信公众号&#xff1a;趣编程ACE关注可了解更多.NET日常开发技巧&#xff0c;如需源码&#xff0c;请公众号留言 源码;JWTActionFilter 简便控制器代码这是微软关于过滤器的介绍&#xff1a;https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?viewaspne…

在P2P市场中代替“看不见的手”的算法在哪里

◆ ◆ ◆ 本文简单探讨P2P市场机制&#xff0c;在此基础上探讨匹配撮合服务的可能性。 ◆ ◆ ◆ P2P市场机制基本定义与假设 首先&#xff0c;我们回顾一些基本定义与假设。P2P市场为“网络借贷是指个体和个体之间通过互联网平台实现的直接借贷。”[2]利率决定一般是平台决定借…

Android之adb jdwp获取debug版本app的进程Id

1、adb jdwp命令 adb jdwp获取debug版本app的进程Id 2、用途 带我们运行一个debug版本的app时候&#xff0c;我们需要过滤日志&#xff0c;我们一般采取这种办法 adb shell ps | grep package 得到进程ID,然后 adb logcat | grep pid 打印日志&#xff0c;有了adb jdwp&…

NPOI格式设置1

using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; //创建Execl IWorkbook hssfworkbook new HSSFWorkbook(); //创建一个Sheet hssfworkbook.CreateSheet("Sheet1"); //HSSFWorkbook实例写入文件 FileStream file new FileStream("test.xls", F…

软件配置管理(五)常用重构技巧

文章目录一、重新组织函数1.提炼函数2.内联函数3.内联临时变量4.以查询取代临时变量5.引入解释性变量6.分解临时变量7.移除对参数的赋值8.以函数对象取代函数9.替换算法二、在对象之间搬移特性1.搬移函数2.搬移字段3.提炼类4.将类内联化5.隐藏“委托关系”6.移除中间人7.引入外…

关于他们回答的 怎样在桌面建一个python GUI的快捷方式 这个问题

在之前的2个随笔里面&#xff0c;有写过《找到可以解决问题的正确的人》、《如何提问》&#xff0c;说白了就是您需要帮助的时候&#xff0c;您得让对方100%懂你&#xff0c;否则没戏。 那么最近看到这样1个古老的问题&#xff0c;和一些没有答到"点儿"上的回答&…

Android之最简单和靠谱的监听Home键和菜单键(最近任务栏)

1、介绍ACTION_CLOSE_SYSTEM_DIALOGS /*** Broadcast Action: This is broadcast when a user action should request a* temporary system dialog to dismiss. Some examples of temporary system* dialogs are the notification window-shade and the recent tasks dialog.*…

.NET Core中行为过滤器ActionFilterAttribute的使用介绍

什么是行为过滤器&#xff1f;行为过滤器是你可以应用到一个控制器行为的&#xff0c;或者整个控制器的&#xff0c;来修改控制器行为的执行方式的属性。当请求进入 API 接口的时候&#xff0c;操作过滤器提供了一个进入之前&#xff08;before&#xff09;和进入之后&#xff…

基本线程同步(三)在同步的类里安排独立属性

声明&#xff1a;本文是《 Java 7 Concurrency Cookbook 》的第二章&#xff0c;作者&#xff1a; Javier Fernndez Gonzlez 译者&#xff1a;许巧辉 校对&#xff1a;方腾飞 在同步的类里安排独立属性 当你使用synchronized关键字来保护代码块时&#xff0c;你必须通过一…

旧项目适配iphone6和iphone plus

iphone手机屏幕大小和像素&#xff1a;1.iPhone5/5s 320x568&#xff0c;像素640x1136&#xff0c;2x2.iPhone6 375x667&#xff0c;像素750x1334&#xff0c;2x3.iPhone6 Plus 414x736&#xff0c;像素1242x2208&#xff0c;3x旧的项目在xcode6上运行在iphone6或…

java之用反射实现方法(已知实体对象和实体参数)

1、问题 有个函数需要在Android 23&#xff08;6.0&#xff09;以上&#xff0c;但是我们的API是22,所以这个实体对象调用不了这个函数&#xff0c;这个时候我们应该想到的是反射&#xff0c;切记。 2、实现 同时看我写得很着急&#xff0c;因为我是先class.forName("**…

Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config

之前不小心删除了server的服务器设置&#xff0c;运行时各种报错Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config &#xff0c;网上找到解决方法记录下&#xff1a; 第一步&#xff1a;将左边的classpath中的server删除掉…