上海平台网站建设公,wordpress 首页缩略图,怎么在网站添加链接,网页搜索能力属于专业技术素养吗本文将从以下11点介绍javascript和PHP在基础语法和基本操作上的异同#xff1a;1.数据类型的异同2.常量和变量的定义的不同#xff0c;字符串连接运算符不同3.对象的创建方法的不同4.PHP与JS在变量声明提升和函数声明提升的差异5.var在JS和PHP中使用的差异6.PHP和JS在访问对象…本文将从以下11点介绍javascript和PHP在基础语法和基本操作上的异同1.数据类型的异同2.常量和变量的定义的不同字符串连接运算符不同3.对象的创建方法的不同4.PHP与JS在变量声明提升和函数声明提升的差异5.var在JS和PHP中使用的差异6.PHP和JS在访问对象属性时候使用的操作符不同7.类型检测的方式不同8.论PHP和JS打印变量的方式的对比9.PHP和JS中函数作用域和全局作用域的关系10.引用传递还是值传递11.JS和PHP对 “数组 数组”这一表达式截然不同的对待1.数据类型不同JS基本类型string,number,boolean,null,undefined 引用类型:object, array,function,(date,RegExp)PHP:标量类型:string,float,integer,Boolean,复合类型object,array 特殊类型null,Resource【注意】• PHP里没有Function类型和undefined类型虽然PHP定义和使用的函数和类似但在这里函数在类型上只能归为Object类型。同时undefined类型也是不存在的• Resource即资源类型变量它保存有为打开文件、数据库连接、图形画布区域等的特殊句柄2.常量和变量的定义不同字符串连接运算符不同对JS变量定义var A 1 或let A 1; 常量定义const A 1;(ES6)对PHP变量定义在变量名称前加$ 常量定义 define(变量名称[字符串], $value[常量的值])$b 我是变量//定义变量?【注意】在PHP中使用变量和常量的区别在于变量在需要在前面加$,常量不需要字符串连接要用“.”操作符而不是“”操作符JS:var str 外婆的 彭湖湾PHP在PHP中连接字符串时候我们不能像JS中使用我们喜闻乐见的“”运算符了运行结果如你所见当你试图这样做的时候它只会返回0而当你改成3.对象的创建方法不同——在PHP中你无法使用在中司空见惯的对象字面量中你可以这样定义对象var person {name:penghwuan}在中上述做法是种语法错误如果你非要用对象字面量呢你可能要这样用(下面只是示范不推荐)$obj json_decode($obj_text);//将字符串解析成JSON对象var_dump($obj);//打印对象?运行结果那么在中应该怎么创建对象呢——定义一个类并实例化对象var $hometown 广东梅州;//定义方法public functionget_name(){return $this-name;}}$person new obj;//实例化对象$hometown $person-hometown;//通过对象访问成员变量$name $person-get_name();//通过对象调用方法echo 我叫.$name;echo ;echo 我来自.$hometown;?4.变量声明提升和函数声明提升JS中最让我们印象深刻的特点是它变量声明提升和函数声明提升的特点在解析所有代码前编译器会优先将所有的函数声明和变量声明执行一遍然后再执行具体的代码。JS存在变量和函数声明提升首先先说一下变量声明提升而在这之前先问大家一个问题如果我们输出一个没有定义的变量会怎么样运行没错会抛出变量未定义的错误。如果我在输出语句的下方加个声明呢var bless 鸡年大吉根据猜测可能的结果三种1还是报错2打印undefined3打印“鸡年大吉”demo:结果是undefined,已经不会报错了但也并没有被赋值为“鸡年大吉”这告诉我们两个结论1.JS中存在变量声明提升,var声明的变量会被提升至代码顶部执行(在下方声明后不报未定义的错了)2.JS中虽然存在变量声明提升但赋值操作却不能被提升(输出undefined而不是鸡年大吉)根据上述两点的结论console.log(bless);//输出一个尚且不存在的变量var bless 鸡年大吉等价于var bless;//变量声明被提升console.log(bless);//输出一个尚且不存在的变量bless 鸡年大吉;//赋值操作未被提升再说一下函数变量提升console.log(祝你鸡年大吉吧)}在声明一个函数前调用这个函数这就是函数声明提升PHP对PHP存在函数声明提升但不存在变量声明提升让我们看一下下面这个例子send_bless();//提前调用函数$bless 鸡年大吉;//定义变量function send_bless(){//通过声明方式定义函数echo 祝你鸡年大吉吧.;}?结果是什么呢这告诉我们PHP里面存在函数声明提升而不存在变量声明提升5.关于var——在PHP中你差不多可以忘记var了我相信这三个var字母已经被无数JSer书写过无数次了但在PHP中还能不能用var呢能但var已经被“打入冷宫沦为摆设”JS var 变量 变量值PHP在PHP中var只能放在类中起到声明成员变量的作用放在类以外的地方就会报错运行在类中使用就不会报错啦}$me newPerson();echo $me-word;?6.访问对象属性时候使用的操作符不同JS:使用“.”操作符var obj {name:彭湖湾};console.log(obj.name);PHP使用“-”操作符}}$me newPerson();echo $me-word;//通过-访问对象中的成员变量echo ;echo $me-echo_word();//通过-调用对象中的方法?7.类型检测的方法不同在类型检测的方法中我们一般将方法分成两个思路思路:检测变量属于哪种类型。(返回string)思路:检测变量是否属于给定类型(返回boolean)基于这一思路我来阐述JS和PHP的类型检测机制对思路typeof 变量 检测变量类型,能够检测所有基本类型(除了null)也能检测出引用类型中的function和Object缺陷不能检测出Array和普通对象而会把它们都检测为Objectvar number 1,str 字符串,bool true,null_value null,undefined_value undefined;var fuc function(){}, array [1,2,3],obj {};console.log(number的类型是,typeofnumber);console.log(str的类型是,typeofstr);console.log(null_value的类型是,typeofnull_value);console.log(undefined_value的类型是,typeofundefined_value);console.log(fuc的类型是,typeoffuc);console.log(array的类型是,typeofarray);console.log(obj的类型是,typeofobj);从上面的例子可看出typeof的缺陷所在不能检测出Array和普通对象而会把它们都检测为Object【吐槽】正所谓学而不思则罔就在复习这个知识点的时候我发现了一个极其有趣的现象null检测的类型是object!!是object!!!!我还在知乎上找到了这样一段答案思路变量 instanceof 类型 能分别检测出array,普通object和functionvar fuc function(){}, array [1,2,3],obj {};console.log(fuc的类型是Function,fuc instanceofFunction);console.log(array的类型是Array,array instanceofArray);console.log(obj的类型是Object,obj instanceofObject);console.log(fuc的类型是Object,fuc instanceofObject);console.log(array的类型是Object,array instanceofObject);对PHP思路1gettype(变量) 能区分出任意数据类型echo ;var_dump(gettype($array_test));//检测数组echo ;var_dump(gettype($string_test));//检测字符串echo ;var_dump(gettype($int_test));//检测数组echo ;var_dump(gettype($float_test));//检测字符串?思路2is_array()、is_bool()、is_float()、is_integer()、is_null()、is_numeric()、is_object()能检测任意数据类型echo ;var_dump(is_array($array_test));//检测数组echo ;var_dump(is_string($string_test));//检测字符串echo ;var_dump(is_integer($int_test));//检测数组echo ;var_dump(is_float($float_test));//检测字符串echo ;var_dump(is_numeric(12));//检测是否为数字字符串或数字echo ;?8.论打印变量的方式JSconsole.log()打印基本类型的值遇到对象或数组则打印对象属性或数组元素PHP:一般有几种选择方式1.echo(注意这TM可能是个坑)只能打印标量数字字符串或布尔值打印object或Array会报错而且打印布尔值的时候true打印1,false时候什么也不打印2.var_dump打印更详细变量的类型和值,它在打印object或者array的时候会连数组元素的类型和值也打印出来(更暖更贴心)• echo:让我们来看看为什么我说它是个坑打印Array时报类型转换的警告但仍能打印类型打印object直接报错连类型也不打印打印布尔值的时候若为true则打印1若为false啥也不打印?php $true_value true;$false_value false;echo $true_value;echo ;echo $false_value;?var_dump相比起来就良心多了}}$obj newclass_test();$array_test [1,2,3];$string_test 字符串;$int_test 1;$float_test 1.2;var_dump($obj);//检测对象echo ;var_dump($array_test);//检测数组echo ;var_dump($string_test);//检测字符串echo ;var_dump($int_test);//检测整型echo ;var_dump($float_test);//检测浮点型echo ;?业界良心有没有9.与JS相比PHP没有作用域链的概念。和JS一样PHP也把作用域划分为函数作用域和全局作用域。但是由于PHP没有作用域链所以函数作用域中不能访问全局作用域中的变量JS函数作用域能访问全局作用域中的变量全局作用域不能访问函数作用域中的变量:1函数作用域(最外层)能访问全局作用域中的变量var global_variable 全局变量;functionfuc(){console.log(global_variable);}fuc();运行结果2全局作用域不能访问函数作用域中的变量:functionfuc(){var area_variable 局部变量}fuc();console.log(area_variable);运行PHP函数作用域(最外层)不能访问全局作用域中的变量全局作用域也不能访问函数作用域中的变量函数作用域不能访问全局作用域中的变量【友情提示各位JSer不要因为写了太多JS就以为所有的语言都有作用域链哦~】$variable 变量;functionfuc (){echo $variable;}fuc();?全局作用域也不能访问函数作用域中的变量(这是当然的啦)functionfuc (){$variable 函数作用域中变量;}fuc();echo $variable;?所以PHP中两个作用域间的访问只能通过函数参数这一个“接口”【一张图总结以上内容】10.使用函数参数时为引用传递还是值传递JS只有值传递没有引用传递(注意是只有值传递)对于基本类型只有值传递functionaddNum(value){return value value 1;}var my_value 1;addNum(my_value);console.log(my_value);输出为1而不是2这说明在运行函数fuc时候仅仅是把my_value的值拷贝给一个新创建的局部变量value而已然后对这个新变量进行操作而不是针对原来定义的value变量对于引用类型也只有值传递【这点极易混淆】在上面的例子中可能容易让我们形成一种错误的概念即值传递 对传入变量不会有影响那是不是这样呢functionchange_obj_name(obj){obj.name 不是彭湖湾}var my_obj {name:彭湖湾};change_obj_name(my_obj);console.log(my_obj.name);运行结果可能有人会想怎么调用函数时对象的名称被修改了不是说好了JS是值传递吗对JS是值传递但在这里传递的参数并不是对象而是对象的地址(或引用)也就是说虽然存储my_obj对象地址的变量把值传递给了函数中创建的局部变量obj(值传递)但这两者仍然指向堆内存中的同一个对象所以上述例子中对象的值才被修改了。PHP既有值传递也有引用传递(定义函数时function fuc($value){}是值传递function fuc($value){}是引用传递)先说说值传递}$num 1;echo $num. 是修改前的num;add_num($num);echo ;echo $num. 是修改后的num;?再说说PHP引用传递(习惯C语言的同学应该很熟悉吧其实就在参数前加个而已啦。。。)}$num 1;echo $num. 是修改前的num;add_num($num);echo ;echo $num. 是修改后的num;?11.比较数组相等时对待运算符和运算符截然不同的表现先上结论对JS数组数组(或)比较的是两个数组的地址而对PHP数组数组(或)比较的是两个数组的“内容”• jsvar array1 [1,2,3];var array2 [1,2,3];console.log(两个数组是否相等,array1 array2);console.log(两个数组是否恒等,array1 array2);即使“内容”相等两个数组也不相等这说明对JS数组数组(或)比较的是两个数组的地址• php【吐槽】作为一名写JS的刚写到这里不禁说了句“卧槽居然相等”当然作为一名写JS的你很容易理解在PHP中数组数组和数组数组的区别对数组数组各个数组项对应的值相等类型可以不同例如“12”和12是相等的对数组数组各个数组项对应的相等类型也相同“12”和12不相等