JavaScript随笔记(一)基本观点以及变量范例

一.JavaScript中的基础观点

1.defer属性

平常我们在援用外部js文件的时刻往往是将援用文件的位置放在<head></head>标签当中,比方<script type=”text/javascript” src=”Js/example.js” defer=”defer”></script>那末在<head>标签中引入多个js文件时,浏览器会根据引入递次加载实行这些引入的js文件,假如加载实行的这些js文件的时间比较长,那末页面就会处在守候时期。在下载引入的js文件时,如今的浏览器大多都是会并行下载的,不会去单线程的下载,如许提高了效力,但仍然会壅塞一些其他资本的下载比方说图片的下载,如许就由于js的下载实行而壅塞了UI衬着,会在页面上构成空缺页面,这时候我们能够有多种要领处理这个题目。比方说运用defer属性,虽然运用defer属性这不是最好的要领

剧本会被延晚到全部HTML页面都剖析终了后再运行,HTML5范例请求剧本根据涌现的先后递次实行,因而,第一个耽误剧本会在第二个耽误剧本之前实行。然则现实中并不一定是如许的,所以发起页面中只包含一个耽误剧本。而且这个defer属性只适用于外部剧本文件(引入剧本文件 src = “…”)

2.作用域

  • 全局作用域

在函数外部声明的或许定义的变量属于全局作用域的局限,现实上在函数外部声明或许定义的变量会被作为window对象的属性。
示例代码以下:

var msg;//声明一个变量会作为window对象的属性
alert(msg);//输出undefined
  • 部分作用域
    在函数中运用var操纵符定义的变量为部分变量 函数退出后这个变量就会烧毁,看看下面的代码:
function test(){
   var msg = "hi";//在函数中定义一个变量,当函数实行完成后 这个变量就会烧毁
}
test();//挪用test函数,函数实行完成后,变量msg就会烧毁
alert(msg + "_debug");//剖析毛病

然则须要注重的是,声明或许定义变量时省略var操纵符会直接定义全局变量,以下所示:

function test(){
    msg = "hi";//直接定义全局变量
}
test();
alert(msg + " -sss");//   输出hi -sss

数据范例

JavaScript这门言语属于数据松懈范例的言语,然则也有5种基础数据范例:Undefined,Null,Boolean,Number,和String和一种庞杂数据范例(援用范例)Object,能够运用typeof操纵符检测给定变量的范例。

  • Undefined范例

    Undefined范例只要一个值,也就是undefined.在运用var症结声明一个变量而未对其举行初始化时,这个变量的值就是Undefined。然则须要注重的是:只声明没有初始化的变量的值是undefined, 然则假如没有声明变量而直接运用一个没有声明的变量会报错看看下面的代码呗

var msg;//这个变量声明以后虽然没有初始化然则获得了undefined值
alert(msg);//输出undefined
alert(msg == undefined);//输出true
alert(aa);//aa并没有声明 报错 ReferenceError: aa is not defined

但是,恶心的处所是在于运用typeof操纵符推断一个不管是不是举行过声明的变量都邑返回undefined,以下所示:

var msg;//这个变量声明以后虽然没有初始化然则获得了undefined值
//age并没有声明
alert(typeof msg);//输出undefined
alert(typeof age);//age并没有声明 然则依旧会返回undefined
  • Null范例

Null范例也是只要一个值的特别数据范例,即null,null示意一个空对象指针 而用typeof检测null值会返回object,假如要声明一个变量指向一个对象(Object),那末能够声明时先var dog = null; 以下所示:

var dog = null;
alert(dog);//输出空缺
alert(typeof dog);//输出object

实际上,undefined值是派生自Null值的,所以他们的相称性测试会返回true alert(undefined == null);//输出true.只管,undefined和null有着如许的关联,然则他们的用处是完整差别的,声明一个对象时,只管让这个指向对象的变量指向null,即表现了null作为空对象指针的通例,又有助于辨别undefined和null.

  • Boolean范例

Boolean范例的值只要true和false,然则任何范例的值挪用Boolean()函数,都能够返回一个Boolean范例的值,看看下面的代码示例:

String 范例,假如黑白空的字符串 转换完成后是true 假如是空字符串是false

var msg = "hi" ;
var msg1 = "";
alert(Boolean(msg));//  非空字符串 输出true
alert(Boolean(msg1)); // 空字符串 输出false

Number范例,假如黑白零的数值则会转换为true,假如是0或许NaN则会转换为false

alert(Boolean(0));//输出false
alert(Boolean(222));//输出true

Obeject范例,假如是Object范例的变量而且指向一个对象,那末返回true,假如指向的是null,那末返回false.看看下面的代码:

var t1 = new Object();
console.debug(Boolean(t1));//true
var t2;
console.debug(Boolean(t2));//false
var t3 = null;
console.debug(Boolean(t3));//false
function isNull(obj){
    if(obj){
        console.debug('obj不为空');
    }else{
        console.debug('obj为空');
    }
}
isNull(t1);//obj不为空
isNull(t2);//obj为空
isNull(t3);//obj为空
  • Number范例

1.浮点数值

由于保留浮点数值所须要的内存空间是保留整数值的两倍,因而ECMAScript会只管的将float能够转化整数值
假如一个小数点背面没有数字,那末这个数值就会作为整数存储,假如浮点数自身就是一个整数,比方1.0也会转换为整数
存储。以下所示:

var n1 = 1.0;//虽然是浮点数,然则即是一个整数,剖析为1
var n2  = 2.;//小数点后没有数字,剖析为2

2.NaN值

NaN值(Not a Number 非数值型)示意原本要返回数值的操纵效果却未返回数值的状况。比方 1/0如许的操纵
NaN有两个特性::
1任何触及NaN的操纵(比方NaN/10)都邑返回NaN
2.NaN与任何数值包含NaN都不想等 比方NaN == NaN 返回false
isNaN()函数能够协助我们肯定这个参数 是不是为不是数值 比方 isNaN(NaN);返回true

3.数值转换
数值转换时运用的转换函数:Number()、parseInt()、parseFloat()
1.Number()函数的转换划定规矩:适用于任何数据范例。

  • boolean值 true和false分别被转换为 1 和 0;

  • 数值只是简朴的传入和返回;

  • null转换为 0;

  • undefined转换为 NaN;

  • 目的是字符串时的转换划定规矩:
    字符串中只包含数字,将其转换为十进制数值,前导0会被疏忽(包含了八进制的转换,由于八进制是有前导0和其他0-7的数字构成);字符串中包含有用浮点值,转换为对应的浮点数;字符串中包含有用的十六进制数,会转换为相称的十进制数值(比方“0xf”);空字符串转换为0;

  • 目的是对象的转换划定规矩:
    假如目的是对象,则挪用对象的valueOf()要领,然后根据前面的划定规矩转换返回值,假如转换的效果是NaN,则挪用对象的toString()要领,
    然后再次根据前面的划定规矩转换返回的字符串值.能够看看下面的示例代码:

var num1 = Number("Hello world!");  //NaN
var num2 = Number("");              //0
var num3 = Number("000011");        //11
var num4 = Number(true);            //1

2、parseInt()转换函数

parseInt(parseNum,radix)函数,第一参数为须要转换的数值,第二个参数为基数,即以radix为基数,
对parseNum举行转换,转换完成后返回的数值是10进制数,而且为number范例,这类转换要领主如果用来转换字符串,
parseInt会会略字符串前面的空格字符获得效果的第一个字符不是数字字符和负号(-),将返回NaN。
parseInt()能够接收两个参数,第一个值示意要举行转换的值,第二个示意转换的体式格局(十进制、十六进制、或许八进制花样)。
当没有第二个参数时,默许转换为十进制。

        var num1 = parseInt("11", 2);         //3  parsed as binary
        alert(typeof(num1));                        // alert number 为number范例
        var num2 = parseInt("15", 8);         //13 parsed as octal
        var num3 = parseInt("10", 10);        //10 parsed as decimal
        var num4 = parseInt("11", 16);        //17 parsed as hexadecimal

3、parseFloat()转换要领,该要领会一直疏忽前导0且只要一个小数点有用,假如小数点以后只要数字0,将会返回整数。

4、其他的转换要领
toFixed()自动四舍五入,接收一个参数,示意返回值的小数位数。
toExponential()以指数示意法返回字符串。
toPrecision(),自动挑选适宜的示意要领。

注:这三个要领都邑返回字符串。

   var num3 = parseFloat("10.12345", 10);
   alert(typeof num3);//转换完成后为number范例
   var num3Str = num3.toFixed(4);//四舍五入后返回的是string范例
   alert(num3Str);//10.1235
   alert(typeof num3Str);//string范例

操纵符须要注重的处所

  1. 关于 + 操纵符,假如有一个操纵数是字符串范例,那末另一个操纵数会转换为字符串,然后拼接起来,看看下面的代码
var f = true;
alert(f);//true
alert(typeof f);//boolean
var s = "";
alert( s + f);//输出true
var fs = s+f;
alert( typeof fs);//返回String
var str = 'test_';
var strT = str + f;
alert(strT);//test_true
alert(typeof strT);//string
var num = 5;
var s = "5";
var ss = num+s;
alert(ss);//输出55  将num转换为字符串的5 然后与5拼接得 字符串55
alert(typeof ss); //string
var is = parseInt(s);
alert(is + num);//输出10

2.比较操纵符 > < <= =>

  • 假如两个操纵数都是数值 ,举行数值比较,
  • 都是字符串,则比较两个字符串的字符编码值
  • 只要一个操纵数是数值,则将另一个操纵数转为数值举行比较
  • 假如有一个操纵数是布尔值,则先将其转换为数值,然后再举行比较。
  • 假如一个操纵数是对象,则挪用这个对象的valueOf()要领,用前面的划定规矩。假如对象没有valueOf()要领,则挪用toString()要领
  • 假如两个操纵数都是对象,则比较他们是不是是同一个对象。假如两个操纵数都指向同一个对象,则相称操纵返回true,不然返回false
    null和undefined是相称的
// == 与 != 的推断是先转换再推断
var result =  "1" == 1;//  字符串会转换为数值 true
result =   "1" == 0;//  字符串会转换为数值 false
result = null == undefined;//null 与undefined 相称
result = null ==NaN;//NaN不管跟什么比较 都不相称false
result = NaN == NaN;//NaN纵然与NaN比较 都是false
//如果比较两个对象是不是==  则是是不是指向同一个对象
var o1 = new Object();
var o2 = new Object();
var o3 = o1;
alert('o1==o2 ? ' + (o1==o2));//false
alert('o1==o3 ? ' + (o1==o3));//true
    原文作者:赵冰
    原文地址: https://segmentfault.com/a/1190000000609460
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞